今天在刷leetcode时发现有一行代码是ret.append(path[:])
,之前一直以为path[:] 和 path
等价,但是如果写成path
就WA,查阅资料后发现是Python列表复制的知识没有掌握.
在这里记录一下二者的区别,看看下面的代码就熟悉了.
x = [1,2,3,4]
y = x
x.append(3)
y
Out[38]: [1, 2, 3, 4, 3]
id(x)
Out[39]: 140677897851592
id(y)
Out[40]: 140677897851592
对于y=x
这种形式,在计算机内部内存把这两个变量指向了相同的地址, 改变了x,y就会同时改变.
m = [1,2,3]
n = m[:]
m.append(4)
n
Out[44]: [1, 2, 3]
id(m)
Out[45]: 140677898007880
id(n)
Out[46]: 140677897999752
对于m = n[:]
这种形式,计算机内部会给变量m分配一个新的地址,开辟一个新的内存空间,n改变不再会影响m的值.
此外还有一种方式 m=list(n)
也会在内存中创建一个新的地址和内存空间.