参考: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=dictprint(id(dict))print(id(dict1)) 输出结果:22430424608722243042460872
浅拷贝 |
import copydict = { "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']))输出结果:2053865129160205386557120820538670155602053867015560
深拷贝 |
import copydict = { "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']))输出结果:3045244716232304524512474430452466017363045246600456
深浅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] = 5010 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]}
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] = 5010 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]}