深浅拷贝与赋值

参考:http://www.cnblogs.com/Eva-J/p/5534037.html

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。(可以把数字,字符串看作是内存中最小的地址)

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。浅拷贝只拷贝第一层地址,而深拷贝是不管你数据结构多么复杂,都在内存里开辟一块新的空间,直到简单数据类型为止。

以这个字典为例:

dict = {"k1":"mu","k2":23,"k3":["alex",123]}

赋值                                                                                                                                                                                                                                                                           

dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict1=dict
print(id(dict))
print(id(dict1))   
输出结果:
2243042460872
2243042460872
浅拷贝                                                                                                                                                                                                                                                                         

 

 

 

import copy
dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict2=copy.copy(dict)
print(id(dict))
print(id(dict2))
print(id(dict['k3']))
print(id(dict2['k3']))
输出结果:
2053865129160
2053865571208
2053867015560
2053867015560
深拷贝                                                                                                                                                                                                                                                                         

import copy
dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict3 = copy.deepcopy(dict)
print(id(dict))
print(id(dict3))
print(id(dict['k3']))
print(id(dict3['k3']))
输出结果:
3045244716232
3045245124744
3045246601736
3045246600456

深浅copy的应用举例:

 

 1 import copy
 2 dic = {
 3     "cpu":[80,],
 4     "mem":[80,],
 5     'disk':[80,]
 6 }
 7 print('before:',dic)
 8 new_dic = copy.copy(dic)
 9 new_dic['cpu'][0] = 50
10 print(dic)
11 print(new_dic)
12 输出结果:
13 before: {'disk': [80], 'cpu': [80], 'mem': [80]}
14 {'disk': [80], 'cpu': [50], 'mem': [80]}
15 {'disk': [80], 'cpu': [50], 'mem': [80]}
浅copy

 

 1 import copy
 2 dic = {
 3     "cpu":[80,],
 4     "mem":[80,],
 5     'disk':[80,]
 6 }
 7 print('before:',dic)
 8 new_dic = copy.deepcopy(dic)
 9 new_dic['cpu'][0] = 50
10 print(dic)
11 print(new_dic)
12 输出结果:
13 before: {'cpu': [80], 'mem': [80], 'disk': [80]}
14 {'cpu': [80], 'mem': [80], 'disk': [80]}
15 {'cpu': [50], 'mem': [80], 'disk': [80]}
深copy

 

posted @ 2016-08-24 18:23  木木dan子  阅读(403)  评论(0编辑  收藏  举报