python中的列表复制问题

  今天在刷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) 也会在内存中创建一个新的地址和内存空间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值