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

Python中的拷贝与深浅拷贝

时间:2019-12-15 18:46:56      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:info   src   行修改   字符串   拷贝   改变   code   结果   数字   

赋值

即为赋值.举个例子

a = 147147
b = a # 赋值
print(a is b) # True

结论:对于通过用 = 号赋值,数字和字符串在内存当中用的都是同一块地址。

浅拷贝

对于浅拷贝,字典、列表、元组等类型,它们只拷贝第一层地址

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 678]}
n3 = copy.copy(n1)  # 浅拷贝
print("第一层字典的内存地址:")
print(id(n1))
print(id(n3))
print("第二层嵌套的列表的内存地址:")
print(id(n1["k3"]))
print(id(n3["k3"]))

结果

第一层字典的内存地址:
6516024
6516096
第二层嵌套的列表的内存地址:
36995720
36995720

第一层的n1和n3指向的内存地址已经改变了,但是第二层的列表并没有拷贝成功,它的内存地址还是一样的,所以当n3第二层的列表进行修改的时候,n1里的列表也会被修改.

原理如下
技术图片

深拷贝

deepcopy

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 678]}
n4 = copy.deepcopy(n1)  # 深拷贝
print("第一层字典的内存地址:")
print(id(n1))
print(id(n4))
print("第二层嵌套的列表的内存地址:")
print(id(n1["k3"]))
print(id(n4["k3"]))

结果:

第一层字典的内存地址:
31157560
35463600
第二层嵌套的列表的内存地址:
35947144
35947336

结论:内存地址都改变了,有几层嵌套就改变几层嵌套,很牛逼的一个拷贝,都是引用的n1的里面的值
原理如下:
技术图片

Python中的拷贝与深浅拷贝

标签:info   src   行修改   字符串   拷贝   改变   code   结果   数字   

原文地址:https://www.cnblogs.com/jhpy/p/12045253.html

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