Идентичные списки не эквивалентны при сравнении is
, если они не ссылаются на один и тот же список. То, что списки имеют одинаковые значения, не означает, что они ссылаются на один и тот же список в памяти.
Например,
>>> a = [1,2,3]
>>> id(a) # memory location list a references
161267628
>>> b = [1,2,3]
>>> id(b) # memory location list b references, a different memory location than list a
161276396
>>> a == b
True
>>> a is b
False
>>> c = a # by this method of assignment; c points to the same point that a does;
# hence changes to a and changes to c, will change both.
>>> id(c) # memory location that c references; this is the same as where a points.
161267628
>>> a is c
True
>>> c.append(4)
>>> print a
[1, 2, 3, 4]
>>> print b
[1, 2, 3]
>>> print c
[1, 2, 3, 4]
>>> d = a[:] # this just copies the values in a to d.
>>> id(d)
161277036
Это имеет смысл, что они указывают на разные области памяти, потому что, если вы хотите сказать, измените первый список (например, добавьте 4
к концу a
) без изменения b
, что было бы невозможно, если бы a
и b
указывают на одно и то же место в памяти.