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

时间:2018-08-30 11:08:58

标签: python list concatenation add

我已经阅读了很多信息herehere,但我仍然不明白python在将a=this.path/with.dots/in.path.name/filename.tar.gz echo $(dirname $a)/$(basename $a | cut -d. -f1) 连接这两个列表时,确实制作了6个列表副本。 / p>

3 个答案:

答案 0 :(得分:1)

Python不会复制该列表的6个副本,而是将两个列表合并或连接,并将它们合并为一个列表,即Bar

Python中的列表串联:How to concatenate two lists in Python?

答案 1 :(得分:0)

否,仅复制参考。对象本身根本不会被复制。看到这个:

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)]

答案 2 :(得分:0)

假设有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