欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected] 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
文章概述:对Python浅拷贝与深拷贝的介绍
关键词:Python浅拷贝与深拷贝
本文目录:
Python浅拷贝与深拷贝
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy):
copy
模块的deepcopy
方法,完全拷贝了父对象及其子对象。
直接赋值代码示例
# 直接赋值
a = [11, 22, 33]
b = a
# 打印列表 b
print(b) # 输出: [11, 22, 33]
# 打印内存地址(可选)
# print(id(a), id(b))
# 用来判定 a 和 b 地址和对应的值完全相等
print(a is b) # True, 因为 b 是通过直接赋值引用了 a
print(a == b) # True, 因为 a 和 b 的内容相同 (不是看是否地址相同)
#和java中不太一样,java中要么是数值比较大小,要么判断地址(是否是同一个对象)
c = {'name': 'baizhan'}
d = c
# print(id(c), id(d))
print(c is d) #True
print(c == d) #True
a.append(44)
print(a) #[11, 22, 33, 44]
print(b) #[11, 22, 33, 44]
print(a is b) #True
print(a == b) #True
c['age'] = 21
print(c) #{'name': 'baizhan', 'age': 21}
print(d) #{'name': 'baizhan', 'age': 21}
print(a is b) #True
print(a == b) #True
浅拷贝(copy):
# 浅拷贝
a = [1, 2]
b = [3, 4]
c = [a, b]
d = c # d 和 c 引用的是同一个对象
#浅拷贝
#只是给父级新开辟了一个空间,里面的子元素还是指向父级的子元素
import copy #导入copy模块,模块里有深浅拷贝两个模块
e = copy.copy(c)
# 或者使用e=c.copy()
'''c.copy()
来源:列表、字典等内置数据结构提供的 copy() 方法。
适用范围:只适用于提供了 copy() 方法的对象,如列表、字典和某些自定义类。'''
# print(id(c), id(d), id(e))
print(c is e) # False, e 是一个新的对象
print(c == e) # True, e 和 c 的内容相同
print(c[0] is d[0]) #true 完全相同
print(c[0] is e[0]) #true 子地址相同
a.append(5)
b.append(6)
print(c) #[[1, 2, 5], [3, 4, 6]]
print(d) #[[1, 2, 5], [3, 4, 6]]
print(e) #[[1, 2, 5, 5], [3, 4, 6, 6]]
深拷贝(deepcopy)
import copy
# 深拷贝
a = [1, 2]
b = [3, 4]
c = [a, b]
d = copy.deepcopy(c)
print(c is d) #False
print(c[0] is d[0])#False
print(c[1] is d[1])#False
c.append(5)
print(c)
print(d)#没影响
a.append(3)
b.append(5)
print(c) #[[1, 2], [3, 4], 5]
print(d) #没影响[[1, 2], [3, 4]]
d[0].append(5)
d[1].append(6)
print(d)
print(c)#没影响
d.append(7)
print(d)
print(c) #没影响
标签:15,区别,print,拷贝,copy,True,id,append
From: https://blog.csdn.net/ta683280/article/details/140747024