python中的深浅拷贝的区别

li = [1,1,2,3,4,5,6,7,8,9]
l2=li # 这样定义不行共用内存空间,其实是一体
# l2 = [1,1,2,3,4,5,6,7,8,9]
l3=li[:]
for i in l2:
if i%2!=0:
li.remove(i)
print(li) # [1, 2, 4, 6, 8]
print(id(li)) # 获取内存地址,li、l2 li=l2 是相同的内存地址
print(id(l2))
print(id(l3))
# 循环删除list的时候,都会出现这样的问题
# 循环的时候,不要删除元素,下标会错乱
# 解决的方法是利用两个list,循环不变的list
# 深拷贝 l2=li[:] 两个不同的内存地址,互不影响 两个不同的内存地址
# 浅拷贝 l2=li 互相影响 两个的内存地址相同
import copy

d={'name':'xiaohei','l':[4,5,6]}
d1=d #浅拷贝 和copy.copy的方法一样,虽然copy的ip内存地址不同,但是最里面的一层【】做不了深拷贝
d2=copy.deepcopy(d) # 深拷贝
d1['l'].append('8')
d2['sex']='女'
d1['age']=18

print(d) #{'name': 'xiaohei', 'l': [4, 5, 6, '8'], 'age': 18} #浅拷贝的影响,深拷贝不影响

posted on 2019-04-23 18:35  dongxl  阅读(687)  评论(0)    收藏  举报

导航