在列表中追加列表(引擎盖下的Python)
这个问题的灵感来自 问题是:在列表中追加列表(引擎盖下的Python),python,Python,这个问题的灵感来自 问题是: a = [10] k = [a,a,a,a] a = [20] print(k) 这将产生: [[10], [10], [10], [10]] [[20], [20], [20], [20]] 当 a = [] k = [a,a,a,a] a.append(20) print(k) 这将产生: [[10], [10], [10], [10]] [[20], [20], [20], [20]] 这在Python中是如何工作的?在前一种情况下,k的条
a = [10]
k = [a,a,a,a]
a = [20]
print(k)
这将产生:
[[10], [10], [10], [10]]
[[20], [20], [20], [20]]
当
a = []
k = [a,a,a,a]
a.append(20)
print(k)
这将产生:
[[10], [10], [10], [10]]
[[20], [20], [20], [20]]
这在Python中是如何工作的?在前一种情况下,k的条目在a更改后成为列表中的整数。然而,在后一种情况下,它们只参考原始列表。因此,对a的任何后续更改也会更改k
我怎样才能了解这些结构是如何在引擎盖下工作的?我读过的大多数Python介绍都不够深入,无法理解上面示例中的k何时会引用a或独立于a
其中一个问题是我是否修改了上面的代码,使a是一个整数;如果我做a+=1,k仍然引用原始整数,而不是返回[a+1,a+1,a+1,a+1]。所以,我猜a+=1不仅仅是给a加上一个,而是创建了一个全新的a?这是我的直觉,但我想知道答案…在第一个示例中,
a=[20]
有效地创建了一个新变量a
,它隐藏了前面的a
。因此,k=[a,a,a]
指的是前面的a
(变量不再可以访问它,因为a
现在指的是其他东西)。较早的a
具有值[10]
在第二个示例中,k
是对a
的四个引用的列表a.append(20)
更改a
,即使更改后,k
仍然指向它
如果我修改上面的代码,使a是一个整数;如果我做a+=1
在
a
第一个值为0
。0
对象没有改变,而是使a
具有新值,1
在第一个示例中,a=[20]
有效地创建了一个新变量a
,该变量隐藏了前面的a
。因此,k=[a,a,a]
指的是前面的a
(变量不再可以访问它,因为a
现在指的是其他东西)。较早的a
具有值[10]
在第二个示例中,k
是对a
的四个引用的列表a.append(20)
更改a
,即使更改后,k
仍然指向它
如果我修改上面的代码,使a是一个整数;如果我做a+=1
在
a
第一个值为0
。0
对象不会更改,而是使a
具有新值,1
a=[20]
是新列表与名称a
的新绑定。如果您用来调用a
的旧列表中有一些当前引用,则这些引用不会被覆盖。当然,这个问题是重复的阅读:a=[20]
是新列表与名称a
的新绑定。如果您用来调用a
的旧列表中有一些当前引用,则这些引用不会被覆盖。当然,这个问题是重复的阅读:它不创建新变量,而是重复使用现有的a
variable@juanpa.arrivillaga它确实重新使用了现有的变量名。但是除了名称之外,前面定义的a
和后面定义的a
之间没有联系,具体来说,它们的值之间没有关系。它重用名称来引用不同的对象。它不创建新变量,它重新使用现有的a
variable@juanpa.arrivillaga它确实重新使用了现有的变量名。但是除了名称之外,前面定义的a
和后面定义的a
之间没有任何联系,特别是它们的值之间没有关系。它重用名称来引用不同的对象。