4 回答
TA贡献1995条经验 获得超2个赞
咳嗽
>>> a,b,c = (1,2,3)
>>> a
1
>>> b
2
>>> c
3
>>> a,b,c = ({'test':'a'},{'test':'b'},{'test':'c'})
>>> a
{'test': 'a'}
>>> b
{'test': 'b'}
>>> c
{'test': 'c'}
>>>
TA贡献2051条经验 获得超10个赞
是的,这是预期的行为。a,b和c都设置为同一列表的标签。如果需要三个不同的列表,则需要分别分配它们。您可以重复显示列表,也可以使用多种方式之一复制列表:
b = a[:] # this does a shallow copy, which is good enough for this case
import copy
c = copy.deepcopy(a) # this does a deep copy, which matters if the list contains mutable objects
Python中的赋值语句不复制对象-它们将名称绑定到对象,并且对象可以具有您设置的尽可能多的标签。在第一次编辑中,更改a [0],您将更新a,b和c都引用的单个列表中的一个元素。在第二次更改e中,您将e切换为其他对象的标签(4而不是3)。
TA贡献1873条经验 获得超9个赞
在python中,一切都是对象,也是“简单”的变量类型(int,float等)。
更改变量值时,实际上是更改了它的指针,如果在两个变量之间进行比较,则会比较它们的指针。(要清楚,指针是物理计算机内存中存储变量的地址)。
结果,当您更改内部变量值时,将更改它在内存中的值,并且会影响指向该地址的所有变量。
例如,当您这样做时:
a = b = 5
这意味着a和b指向内存中包含值5的相同地址,但是在执行以下操作时:
a = 6
它不会影响b,因为a现在指向包含6的另一个存储位置,而b仍然指向包含5的存储地址。
但是,当您这样做时:
a = b = [1,2,3]
a和b再次指向相同的位置,但是不同之处在于,如果更改列表值之一:
a[0] = 2
它会更改a所指向的内存的值,但是a仍指向与b相同的地址,结果b也将更改。
添加回答
举报