您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么多个分配和单个分配在python中表现不同

为什么多个分配和单个分配在python中表现不同

Python中的变量是引用或名称,不像C中的变量等。

这段代码

x=y=Queue()

表示“允许名称y引用通过调用在内存中创建的对象Queue(),并允许该名称x引用y指向的对象。” 这意味着两个变量都指向同一个对象- 您可以使用进行验证id(x) == id(y)

这段代码

x=Queue()
y=Queue()

表示“允许名称x引用由制成的一个对象Queue(),并允许名称y引用由制成的另一个对象Queue()”。在这种情况下,id(x) == id(y)False

这通常会咬你:

a = [1,2,3,4,5]
b = a
b.append(6)
print(a)
# [1,2,3,4,5,6] even though we didn't seem to do anything to a!

解决此问题,请import copy; b = a.copy();改为执行b = a

但是,这种行为不会发生在像整数这样的不可变对象上:

a = 7
a += 1

不会 转到a引用的对象并通过添加一个对象来更改它,而是a从对象7取消引用,并将其引用到表示a+ 1(即8)的先前值的对象。这与对可变对象执行的操作不同,就像上一个示例中的列表 一样 -追加到列表 确实会 更改变量所引用的对象。

因此,我们可以这样做:

a = 7
b = a
a += 1
print(a)
# 8
print(b)
# 7
python 2022/1/1 18:28:13 有516人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶