在 python 中将元素从一个列表复制到另一个列表

Copying element from one list to another in python

假设我创建了两个不同的列表:

listA = [0, 0, 0]
listB = [1, 1, 1]

我想让 listB 中的 an 元素与 listA 中的元素引用同一个对象。使两个列表中的元素一起改变。

listB[2] = listA[0]
>>listB[2]
>>0

listB[2] = 2
>>listA[0]
>>2

但是上面的操作只是传递了元素的值,所以列表仍然指的是单个对象。有没有一种方法或不同的数据结构可以给我想要的效果?

这里有一个简单的想法,可以帮助您入门,也可以帮助您更好地理解正在发生的事情:

>>> listA = [[0], [0], [0]]
>>> listB = [[1], [1], [1]]
>>> listA[0] = listB[0]
>>> listA
[[1], [0], [0]]
>>> listB[0][0] = 2
>>> listB
[[2], [1], [1]]
>>> listA
[[2], [0], [0]]

但要小心:

>>> listB[0] = [3]
>>> listB
[[3], [1], [1]]
>>> listA
[[2], [0], [0]]

你可以写一个 class 让它不可见,这样它看起来更像一个列表并且更容易使用而不会出错。

你不能那样做。您可以使 listAlistB 本身成为同一个对象,在这种情况下 all 它们的索引将反映对其中任何一个所做的任何更改,或者您可以使它们单独的对象,在这种情况下,它们的索引的 none 将反映更改。您不能创建两个列表 "joined at the hip",仅共享它们的一些索引引用。

假设 listB[2] 的值是某个名为 obj 的对象。当你做类似 listB[2] = 2 的事情时,你并没有改变 obj;您正在更改 listB(通过使其索引 2 指向其他某个对象)。所以你不能使 listA[2] "reflect" listB[2] 除非 listAlistB 是同一个对象。您当然可以使 listA[2]listB[2] 引用同一个对象,但这不会影响您执行 listB[2] = 2 时发生的情况,因为该操作根本不会影响该共享对象.