七、浅拷贝和深拷贝

name1 = 'alex'
name2 = name1
name1 = 'rooney'
name2 = ?
答案:name2还是等于alex,因为字符串的重新定义是在内存里面重新开辟一个空间,字典,列表,就是在原来的内存空间里面修改,所以上题如果是字典或者列表的话那name2的值就是rooney。
 
总结:
字符串:不紧跟=======》
字典、列表:紧追不舍=======》
 
11.copy ======》浅拷贝(只copy第一层,再往下它就不copy了)
首先,我创建了一个这样的字典,里面有嵌套
>>> for i in range(5):c[i] = []
 
>>> c
{0: [], 1: [], 2: [], 3: [], 4: []}
>>> c[1]
[]
>>> c[1].append({'b':'rooney'})
>>> c
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
 
 
然后,我用d=c,把c的值赋给了d,
>>> d = c
>>> d
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
>>> c
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
 
 
根据上面的说法,这时候我改变c的值,d也跟着变
>>> c['rain'] = "test"
>>>
>>> c
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
>>> d
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
 
 
然后我让e=c.copy(),我们会发现,当c的值改变了,e并没有跟着改变
>>> e=c.copy()
>>> c['sun'] = "wwwwwww"
>>> c
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test', 'sun': 'wwwwwww'}
>>> e
{0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
 
最后我把c里面嵌套的字典的rooney改成了ramos,发现e的值也跟着变了
>>> c[1][0]['b']
'rooney'
>>> c[1][0]['b']='ramos'
>>> d
{0: [], 1: [{'b': 'ramos'}], 2: [], 3: [], 4: [], 'rain': 'test', 'sun': 'wwwwwww'}
>>> e
{0: [], 1: [{'b': 'ramos'}], 2: [], 3: [], 4: [], 'rain': 'test'}
>>>

 

总结:
浅拷贝的意思就是第一层我不拷贝,并且以后第一层的修改我也不会跟着变,但是里面嵌套的层的修改我还是会跟着变
深拷贝的意思就是第一层我不拷贝,并且以后第一层的修改我也不会跟着变,但是里面嵌套的层的修改我也不跟着变,即相当于字符串一样,你变你的,我怎么都不跟着你变了,我完全独立了。
 
如果你想深copy,就要介入python的一个独立的模块,名字就叫做copy
import copy
f = copy.deepcopy(c)
 
posted @ 2019-08-09 20:07  Paco_Pig  阅读(119)  评论(0编辑  收藏  举报