Python变量赋值
有人能解释一下为什么在Python中会发生这种情况吗Python变量赋值,python,list,variables,variable-assignment,Python,List,Variables,Variable Assignment,有人能解释一下为什么在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 = [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=[111]
时,您正在为b分配一个全新的列表对象。因此,b现在包含对新列表的引用,而不再包含对旧列表的引用 这是因为当您执行b=[111]
时,您正在为b分配一个全新的列表对象。因此,b现在包含对新列表的引用,而不再包含对旧列表的引用 当您用a指定b时,两个对象现在都指向相同的内存位置。因此,在任何一个对象中所做的任何更改都将反映在另一个对象中。使用新值分配“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[:],它将仅创建数据的副本。当您使用a分配b时,两个对象现在都指向相同的内存位置。因此,在任何一个对象中所做的任何更改都将反映在另一个对象中。使用新值分配“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=a时,请将此值保留在内存位置x中。 点a和b都是x内存位置。 所以我们改变了b的值,a的值也改变了。 我们将新值赋给b,使其存储在另一个内存位置,b指向新的内存位置。
所以a的值保持原样。当我们定义变量b=a时,将该值保留在内存位置x中。 点a和b都是x内存位置。 所以我们改变了b的值,a的值也改变了。 我们将新值赋给b,使其存储在另一个内存位置,b指向新的内存位置。
所以a的值保持不变。您能告诉我您正在运行哪个版本的python吗?试试
b[:]=[1,1,1,1]
你能告诉我你正在运行哪个版本的python吗?试试b[:]=[1,1,1,1]
这很有意义,谢谢!这很有道理,谢谢!