История изменений
Исправление soomrack, (текущая версия) :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
for item in my_set:
print(item is C)
False
False
False
WTF?!
PS: питон засовывает в множество оперируя операцией сравнения «==», соответственно, если какой-то объект оказался равным в смысле «==» какому-то объекту уже находящемуся в множестве, то объект добавлен не будет. Это абсолютно бесчеловечно по отношению к программисту, проверять на наличие нужно по операции is и хранить в множестве сами объекты.
При этом он действительно хранит именно САМИ объекты:
my_set = set()
my_set.add(C)
print(my_set)
D = my_set.pop()
print(D is C)
print(D is (1, 2))
{(1,2)}
True
False
Исправление soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
for item in my_set:
print(item is C)
False
False
False
WTF?!
PS: питон засовывает в множество оперируя операцией сравнения «==», соответственно, если какой-то объект оказался равным в смысле «==» какому-то объекту уже находящемуся в множестве, то объект добавлен не будет. Это абсолютно бесчеловечно по отношению к программисту, проверять на наличие нужно по операции is и хранить в множестве сами объекты.
При этом он действительно хранит именно САМИ объекты:
my_set = set()
my_set.add(C)
print(my_set)
D = my_set.pop()
print(D is C)
print(D is (1, 2))
{(1,2)}
True
False
Исправление soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
for item in my_set:
print(item is C)
False
False
False
WTF?!
PS: питон засовывает в множество оперируя операцией сравнения «==», соответственно, если какой-то объект оказался равным в смысле «==» какому-то объекту уже находящемуся в множестве, то объект добавлен не будет. Это абсолютно бесчеловечно по отношению к программисту, проверять на наличие нужно по операции is и хранить в множестве сами объекты.
При этом он хранит именно объекты:
my_set = set()
my_set.add(C)
print(my_set)
D = my_set.pop()
print(D is C)
print(D is (1, 2))
{(1,2)}
True
False
Исправление soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
for item in my_set:
print(item is C)
False
False
False
WTF?!
Исправление soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
WTF?!
Исправление soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
WTF?!
PS: нетранзитивность отношения эквивалентности (is) это нечто!
Исходная версия soomrack, :
B = (1, 2)
print(B is (1, 2))
True
C = (1, 2)
print(B is C)
True
C = tuple(list(B))
print(B is C)
False
print(B is (1, 2))
print(C is (1, 2))
print(B)
print(C)
True
False
(1, 2)
(1, 2)
my_set = {1, 'abc'}
my_set.add(B)
my_set.add(C)
print(my_set)
{'abc', 1, (1, 2)}
WTF?!