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变量赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

函数和变量赋值Python [重复]

在python中的赋值错误之前引用的变量[重复]

python中变量定义的意外行为[重复]

Python 2.7 列表理解泄漏变量名 [重复]

python基础 浅复制和深复制

Python变量及数据类型