当 2 个列表与 + 运算符连接时,会创建多少个列表副本?



我在这里和这里阅读了很多信息,但我仍然不明白 python 是否真的制作了 6 个列表副本,例如它[1,2,3,4] + [5,6]这两个列表

连接起来

Python 不会制作列表的 6 个副本,而是连接或连接两个列表并将它们合并为一个,即[1,2,3,4,5,6]

Python中的列表连接:如何在Python中连接两个列表?.

不,只复制引用。对象本身根本不会复制。看到这个:

class Ref:
''' dummy class to show references '''
def __init__(self, ref):
self.ref = ref
def __repr__(self):
return f'Ref({self.ref!r})'
x = [Ref(i) for i in [1,2,3,4]]
y = [Ref(i) for i in [5,6]]
print(x)   # [Ref(1), Ref(2), Ref(3), Ref(4)]
print(y)   # [Ref(5), Ref(6)]
z = x + y
print(z)   # [Ref(1), Ref(2), Ref(3), Ref(4), Ref(5), Ref(6)]
# edit single reference in place
x[0].ref = 100
y[1].ref = 200
# concatenated list has changed
print(z)  # Ref(100), Ref(2), Ref(3), Ref(4), Ref(5), Ref(200)]

假设有 n 个列表 l1、l2、l3、... 如果您添加它们,则在某些地址上只有一个副本。

例如:

In [8]: l1 = [1,2,3]
In [9]: l2 = [4,5,6]
In [10]: id(l1 + l2)
Out[10]: 140311052048072
In [11]: id(l1)
Out[11]: 140311052046704
In [12]: id(l2)
Out[12]: 140311052047136

id((返回对象的标识。 https://docs.python.org/2/library/functions.html#id

最新更新