Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列表中追加列表(引擎盖下的Python)_Python - Fatal编程技术网

在列表中追加列表(引擎盖下的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
之间没有任何联系,特别是它们的值之间没有关系。它重用名称来引用不同的对象。