有人可以解释为什么在 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 中的元素并更改另一个,但如果我完全修改列表却不能更改另一个?谢谢!
有人可以解释为什么在 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 中的元素并更改另一个,但如果我完全修改列表却不能更改另一个?谢谢!
当您将 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[:] 它将仅创建数据的副本。
那是因为当你这样做时,b = [111]
你正在为 b 分配一个全新的列表对象。因此 b 现在包含对新列表的引用,而不是对旧列表的引用。
当我们定义变量 b = a python 时,将此值保存在内存位置 x 中。点 a 和 b 都是 x 内存位置。所以我们b值的变化a的值也变了。我们为 b 分配新值,使其存储在另一个内存位置,并且 b 指向新的内存位置。所以 a 的价值保持不变。