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