为了账号安全,请及时绑定邮箱和手机立即绑定

在列表的情况下使用共享引用时遇到问题

在列表的情况下使用共享引用时遇到问题

慕桂英3389331 2022-08-16 18:44:41
a=b=[1,2,3]print (a is b) #True但a=[1,2,3]print (a is [1,2,3]) #False  为什么第二部分打印?False
查看完整描述

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


查看完整回答
反对 回复 2022-08-16
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您的第一个显式地对列表创建的对象进行引用并显示。ab[1,2,3]


在第二个代码中,列表显示的两种用法都必然会创建新对象,因为列表是可变的,并且您不希望隐式共享对它们的引用。[1,2,3]list


考虑一个更简单的例子:


a = []

b = []

a.append(1)

是否也要进行修改?b


对于不可变值(如 s),语言实现可能会导致文本重用对现有对象的引用,但这不是可以依赖的。int


查看完整回答
反对 回复 2022-08-16
?
四季花海

TA贡献1811条经验 获得超5个赞

问题是您正在使用的逻辑运算符。您询问的是这些相同的对象是否与,而不是它们是否相等(相同的数据)。一个是对象的引用,另一个是对象,所以即使它们相等,它们也不相同。is


为什么选择您的结果

当您设置并作为同一列表时,您正在说并且应该链接并且应该引用相同的数据,以便它们彼此相同,但不是对象,它们是对相同列表的引用。ababab[1,2,3]


总结

==- 等于(相同)。


is- 相同。


因此,如果您想检查它们是否相等(相同),请使用:


>>> a=[1,2,3]

>>> print (a == [1,2,3])

True

值得一读的类似问题:“==”和“is”之间有区别吗?


希望这有帮助,哈利。


查看完整回答
反对 回复 2022-08-16
  • 3 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号