Python:深拷贝与浅拷贝

1.赋值,只是创建了一个变量,这个变量还是指向原来的地址
>>> d={'k1':'v1','k2':'v2','k3':'v3','k4':[1,2,3,4]}
>>> d
{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [1, 2, 3, 4]}
>>> d1=d
>>> id(d),id(d1)
(51603384L, 51603384L)  #指向的变量的内存地址都一样
>>>
2.浅拷贝。简单来说只是拷贝最外面一层变量。

实例:

>>> import copy
>>> d2=copy.copy(d)
>>> id(d),id(d2)
(51603384L, 51661544L)
>>>

输出结果发现d和d2所指向的地址不一样,那我们改变其中的元素

>>> d['k1']='vv1'
>>> d
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [1, 2, 3, 4]}
>>> d2
{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [1, 2, 3, 4]}
>>>

这里写图片描述
发现改变其中一个元素的值对另一个的确没有什么影响。在试一试

>>> d['k4'][0]=100
>>> d
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}
>>> d2
{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [100, 2, 3, 4]}
>>>

列表中的值都发生了改变。说明浅拷贝只能拷贝到第一层,无法拷贝第二层,列表就是第二层

3.深拷贝,在内存中将所有的数据重新创建一份(最后一层不拷贝,即:python内部对字符串和数字的优化)
>>> d3=copy.deepcopy(d)
>>> d3
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}
>>> d
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}
>>> d['k4'][0]=1000
>>> d
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [1000, 2, 3, 4]}
>>> d3
{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}

深拷贝之后这两个变量互不影响了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值