在Python中存储一个列表的元素,在另一个列表中 - 通过引用?

sda*_*aau 6 python arrays reference list

我只是觉得我已经把它记下来了,因为我已经看过了 - 对这种行为得到确认会很好; 我确实看到如何通过引用传递变量?,但我不确定如何在这种情况下解释它.

假设我们有这两个数组/列表:

a = [1, 2, 3, 4]
b = [-1, a, -100, a[2], -1]
Run Code Online (Sandbox Code Playgroud)

口译员最初将其视为:

>>> print(a)
[1, 2, 3, 4]
>>> print(b)
[-1, [1, 2, 3, 4], -100, 3, -1]
Run Code Online (Sandbox Code Playgroud)

现在让我们改变a[2],看看会发生什么:

>>> print(a)
[1, 2, 55, 4]
>>> print(b)
[-1, [1, 2, 55, 4], -100, 3, -1]
Run Code Online (Sandbox Code Playgroud)

所以,无论列表b具有的参考名单 a,该值已经更新-但只要b有一个(一个引用?)被初始化从元素列表a,似乎是Python的扩展在初始化时的值,这样存储的元素值(不是通过引用),所以它的值显然不会更新.

基本上,我找到了一个用例,在这里可以方便地定义eg b = [-1 a[2] -1],然后更新a[2],并且能够计算出a[2]获取(在这种情况下)的值时将发出的最新值b[1].有没有办法在Python中做到这一点,而不必做b = [-1 a -1],然后阅读b[1][2](我想a[2]通过使用获得价值b[1])?

mgi*_*son 2

a是对可变列表的引用。所以,当你说:

a[2] = 55
Run Code Online (Sandbox Code Playgroud)

您正在调用在列表中设置项目的__setitem__列表。 不会尝试改变曾经存储在第二个索引中的项目。它只是用新的引用替换该引用。list.__setitem__

另一方面,x = a[2]调用__getitem__只是创建对存储在列表中该索引处的对象的新引用。