码迷,mamicode.com
首页 > 编程语言 > 详细

python深浅拷贝

时间:2017-08-17 10:29:29      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:内存   字典   asd   空间   数组元素   拷贝   int   赋值   nbsp   

import copy

dic = {                  #定义一个字典,字典里的每一个元素是一个数组。
"cpu":[80,], 
"mem":[80],
"disk":[80,]
}

new_dic = copy.copy(dic)      #浅拷贝, 第一层字典被copy, 重新分配了内存空间。 但是第二层数组元素地址是一样的,所以改变 一个字典的数组值,另一个字典的数组值也改变了。
new_dic[‘cpu‘][0]=50

print(id(dic))
print(id(new_dic))
print(dic)
print(new_dic)
print(id(dic["cpu"]))
print(id(new_dic["cpu"]))

输出:

4364928
4988880                        #浅拷贝 只有第一层字典被copy,重新分配了内存。
{‘disk‘: [80], ‘cpu‘: [50], ‘mem‘: [80]}
{‘disk‘: [80], ‘cpu‘: [50], ‘mem‘: [80]}
5890896                          
5890896                       # 浅拷贝 第二层数组不copy, 内存地址不变。

 

#如果是深拷贝, 字典 和 下一层的数组都被copy, 重新分配内存

new_dic = copy.deepcopy(dic)
new_dic[‘cpu‘][0]=50
print(id(dic))
print(id(new_dic))
print(dic)
print(new_dic)
print(id(dic["cpu"]))
print(id(new_dic["cpu"]))

输出:

9804416
15901520
{‘disk‘: [80], ‘cpu‘: [80], ‘mem‘: [80]}
{‘disk‘: [80], ‘cpu‘: [50], ‘mem‘: [80]}
16245584                                 
16244984                        #第二层的数组也重新分配内存, 所以改变 new_dic 的数据元素,不会影响 dic 的数组元素值。

 

对于数字和字符串, 赋值 和 深浅拷贝 都不会重新分配内存。

import copy
a1 = "asdf"
a3 = a1
a2 = copy.deepcopy(a1)
print(id(a1))
print(id(a2))
print(id(a3))

输出:

2251168  #三个变量的内存地址都一样。
2251168
2251168 

python深浅拷贝

标签:内存   字典   asd   空间   数组元素   拷贝   int   赋值   nbsp   

原文地址:http://www.cnblogs.com/z360519549/p/7376796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!