1

有人可以解释为什么在 Python 中会发生这种情况吗?

>>> a = [1, 2, 3]
>>> b = a
>>> b[0] = 2
>>> print a
[2, 2, 3]
>>> a[0] = 4
>>> print b
[4, 2, 3]
>>> b = [111]
>>> print a
[4, 2, 3]

基本上,为什么我可以重新分配 a 或 b 中的元素并更改另一个,但如果我完全修改列表却不能更改另一个?谢谢!

4

3 回答 3

6

当您将 b 分配给 a 时,两个对象现在都指向相同的内存位置。因此,对任何一个对象所做的任何更改都会反映在另一个对象中。当您为“b”分配一个新值时,对象的内存地址会变得不同。详细说明:

>>> a=[1,2,3]
>>> b=a
>>> id(a)
4520124856
>>> id(b)
4520124856
>>> b=[111]
>>> id(a)
4520124856
>>> id(b)
4520173936 
>>> 

id() 用于获取对象的内存地址。

如果您想创建“a”的精确副本而不具有相同的内存位置,请使用 b=a[:] 它将仅创建数据的副本。

于 2013-09-10T04:58:32.437 回答
0

那是因为当你这样做时,b = [111]你正在为 b 分配一个全新的列表对象。因此 b 现在包含对新列表的引用,而不是对旧列表的引用。

于 2013-09-10T04:52:28.603 回答
0

当我们定义变量 b = a python 时,将此值保存在内存位置 x 中。点 a 和 b 都是 x 内存位置。所以我们b值的变化a的值也变了。我们为 b 分配新值,使其存储在另一个内存位置,并且 b 指向新的内存位置。所以 a 的价值保持不变。

于 2013-09-10T05:04:32.020 回答