Python中list列表的几种拷贝方式

参考地址:Python: copying a list the right way 

list列表几种拷贝方式:

import copy

a = [[1,2],10,20]
a1 = a  #第1种
a2 = a[:]  #第2种
a3 = list(a)  #第3种
a4 = a*1  #第4种
a5 = copy.copy(a)  #第5种
a6 = [x for x in a]  #第6种
a7 = copy.deepcopy(a)  #第7种

a.append(30)
a[0].append(3)

print('a:',a)
print('a1:',a1)
print('a2:',a2)
print('a3:',a3)
print('a4:',a4)
print('a5:',a5)
print('a6:',a6)
print('a7:',a7)

 输出:

a: [[1, 2, 3], 10, 20, 30]
a1: [[1, 2, 3], 10, 20, 30]
a2: [[1, 2, 3], 10, 20]
a3: [[1, 2, 3], 10, 20]
a4: [[1, 2, 3], 10, 20]
a5: [[1, 2, 3], 10, 20]
a6: [[1, 2, 3], 10, 20]
a7: [[1, 2], 10, 20]

a1 = a 表示 a1 和 a 指向同一个内存地址,只是名称不同。

a2~a6 则是指向不同的列表,因为创建新的列表,所以原列表发生改变时,拷贝列表不变,但是里面元素本身的地址并没有改变,所以如果子元素为列表时,子元素列表在拷贝时地址并不会发生变化,所以当原列表中子列表发生改变时,拷贝列表同样会发生改变。

a7 是深度拷贝,所以无论列表中嵌套了几层列表,拷贝列表都不会随着原列表的改变而改变。

b = [1,[10,[100,200]]]
b1 = copy.deepcopy(b)
b.append(2)
b[1].append(20)
b[1][1].append(300)
print('b:',b)
print('b1:',b1)

输出:

b: [1, [10, [100, 200, 300], 20], 2]
b1: [1, [10, [100, 200]]]

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值