Python变量赋值[重复]
Posted
技术标签:
【中文标题】Python变量赋值[重复]【英文标题】:Python Variable Assignment [duplicate] 【发布时间】:2013-09-13 16:22:51 【问题描述】:有人能解释一下为什么在 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吗? 试试b[:] = [1,1,1,1]
【参考方案1】:
那是因为当您执行b = [111]
时,您正在为 b 分配一个全新的列表对象。因此 b 现在包含对新列表的引用,而不是对旧列表的引用。
【讨论】:
【参考方案2】:当您将 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[:],它只会创建数据的副本。
【讨论】:
有道理,谢谢!【参考方案3】:当我们定义变量 b = a python 时,将这个值保存在内存位置 x 中。 点 a 和 b 都是 x 内存位置。 所以我们b值的变化a的值也变了。 我们为 b 分配新值,使其存储在另一个内存位置,并且 b 指向新的内存位置。 所以 a 的价值保持不变。
【讨论】:
以上是关于Python变量赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章