3 回答

TA贡献1806条经验 获得超8个赞
Python 中的多重赋值会创建两个指向同一对象的名称。例如
>>> a=b=[1,2,3]
>>> a[0] = 10
>>> b
[10, 2, 3]
is可用于检查两个名称(和)是否保存对同一内存位置(对象)的引用。因此ab
a=b=[1,2,3] # a and b hold the same reference
print (a is b) # True
现在在这个例子中,
a = [1,2,3]
print (a is [1,2,3]) # False
a不持有对对象的相同引用,即使 并且是具有相同元素的列表。[1, 2, 3]a[1, 2, 3]
如果要比较两个列表是否包含相同的元素,可以使用:==
>>> a=b=[1, 2, 3]
>>> a == b
True
>>>
>>> a = [1, 2, 3]
>>> a == [1, 2, 3]
True

TA贡献1784条经验 获得超2个赞
您的第一个显式地对列表创建的对象进行引用并显示。ab[1,2,3]
在第二个代码中,列表显示的两种用法都必然会创建新对象,因为列表是可变的,并且您不希望隐式共享对它们的引用。[1,2,3]list
考虑一个更简单的例子:
a = []
b = []
a.append(1)
是否也要进行修改?b
对于不可变值(如 s),语言实现可能会导致文本重用对现有对象的引用,但这不是可以依赖的。int

TA贡献1811条经验 获得超5个赞
问题是您正在使用的逻辑运算符。您询问的是这些相同的对象是否与,而不是它们是否相等(相同的数据)。一个是对象的引用,另一个是对象,所以即使它们相等,它们也不相同。is
为什么选择您的结果
当您设置并作为同一列表时,您正在说并且应该链接并且应该引用相同的数据,以便它们彼此相同,但不是对象,它们是对相同列表的引用。ababab[1,2,3]
总结
==- 等于(相同)。
is- 相同。
因此,如果您想检查它们是否相等(相同),请使用:
>>> a=[1,2,3]
>>> print (a == [1,2,3])
True
值得一读的类似问题:“==”和“is”之间有区别吗?
希望这有帮助,哈利。
添加回答
举报