Python基础:深浅拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础:深浅拷贝相关的知识,希望对你有一定的参考价值。

对于数字、字符串深浅拷贝:

import copy
num = 0
copy_num = copy.copy(num)
print("These are normal copy").center(60,‘*‘)
print(num,id(num))
print(copy_num,id(copy_num))
print("These are deep copy").center(60,‘*‘)
deep_copy_num = copy.deepcopy(num)
print(num,id(num))
print(deep_copy_num,id(deep_copy_num))
*******************These are normal copy********************
(0, 3910788)	#原num id
(0, 3910788)	#浅拷贝 id
********************These are deep copy*********************
(0, 3910788)	#原num id
(0, 3910788)	#深拷贝 id

对于字典、元组、列表深浅拷贝:

import copy
dic = {
     "CPU":[80,],
     "IO":[80,],
     "Disk":[70,],
     "Memory":[70,],
 }

copy_dic = copy.copy(dic)
copy_dic["CPU"][0]=30
print("These are normal copy").center(60,‘*‘)
print(dic,id(dic))
print(copy_dic,id(copy_dic))
print("These are deep copy").center(60,‘*‘)
deepcopy_dic = copy.deepcopy(dic)
deepcopy_dic["CPU"][0]=40
print(dic,id(dic))
print(deepcopy_dic,id(deepcopy_dic))
*******************These are normal copy********************
({‘Disk‘: [70], ‘CPU‘: [30], ‘IO‘: [80], ‘Memory‘: [70]}, 39905584)    #原dic id
({‘Disk‘: [70], ‘CPU‘: [30], ‘IO‘: [80], ‘Memory‘: [70]}, 39906736)    #浅拷贝 id
********************These are deep copy*********************
({‘Disk‘: [70], ‘CPU‘: [30], ‘IO‘: [80], ‘Memory‘: [70]}, 39905584)    #原dic id
({‘Disk‘: [70], ‘CPU‘: [40], ‘IO‘: [80], ‘Memory‘: [70]}, 39907168)    #深拷贝 id

  由以上可以看出对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

  对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

  赋值,只是创建一个变量,该变量指向原来内存地址。

以上是关于Python基础:深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

python基础--深浅拷贝函数

Python基础 | 深浅拷贝生成器迭代器以及装饰器详解

Python基础:深浅拷贝

015-python基础-深浅拷贝

python基础--深浅拷贝copy

python基础三(深浅拷贝)