python列表的复制(深拷贝)

python列表(list)的复制

python复制列表的方法有很多,但对于不同的方法,复制的效果却不一样。

1.赋值运算:

直接使用赋值运算符进行赋值时,其实只是把new的地址指向了old的地址,也就是说new和old指向同一块内存。

old = [1,[2,2],3]
new = []
new = old
new[0] = 2
print(new)
'''
[2,[2,2],3]
'''
print(old)
 '''
[2,[2,2],3]
'''

改变new的值,old也会改变

2.copy()方法:

copy方法对于列表的第一层实现了复制,但对于内嵌的其他层也只是复制了地址。因为嵌套的List保存的是地址,复制过去的时候是把地址复制过去了,嵌套的List在内存中指向的还是同一个。

old = [1,[2,2],3]
new = old.copy()
new[0] = 4
new[1][0] = 5
print(new)
'''
[4,[5,2],3]
'''
print(old)
'''
[1,[5,2],3] 
'''

3.使用列表生成

同样只能实现第一层的复制。

old = [1,[2,2],3]
new = [i for i in old]
new[0] = 4
new[1][0] = 5
print(new)
'''
[4,[5,2],3]
'''
print(old)
'''
[1,[5,2],3] 
'''

4.for循环遍历赋值

同样只能实现第一层的复制。

old = [1,[2,2],3]
new = []
for i in range(len(old)):
    new.append(old[i])
new[0] = 4
new[1][0] = 5
print(new)
'''
[4,[5,2],3]
'''
print(old)
'''
[1,[5,2],3] 
'''

5.列表切片

同样只能实现第一层的复制。

old = [1,[2,2],3]
new = old[:]
new[0] = 4
new[1][0] = 5
print(new)
'''
[4,[5,2],3]
'''
print(old)
'''
[1,[5,2],3] 
'''

6.使用深拷贝deepcopy()方法

此方法无论列表多少层,得到的新列表都是和老列表是无关的,是相互独立的。新列表存的是值,而不是地址。

import copy
old = [1,[2,2],3]
new = copy.deepcopy(old)
new[0] = 4
new[1][0] = 5
print(new)
'''
[4,[5,2],3]
'''
print(old)
'''
[1,[2,2],3] 
'''
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值