栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

彻底弄懂Python的浅拷贝和深拷贝

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

彻底弄懂Python的浅拷贝和深拷贝

# _*_ coding : utf-8 _*_
# @Time : 2022/6/28 17:51
# @Author : wy
# @File : ShallowAndDeep
# @Project : python

import copy



# 列表的深浅拷贝:集合和字典与之类似
# 浅拷贝:虽然都是浅拷贝,但是和后三种不一样,后面三种不太浅
print('列表')
print('---列表直接赋值---')
list1 = [1, 2, 3]
list2 = list1
print("浅外:list1 is list2 ?",list1 is list2)   # True
print("浅内:list1[0] is list2[0] ?",list1[0] is list2[0])   # True
print('-------')



# 列表中不够深的浅拷贝
print('---列表中不够深的浅拷贝---')
print('---list()---')
list1 = [1, 2, 3]
list2 = list(list1)
print("浅外:list1 is list2 ?",list1 is list2)   # False
print("浅内:list1[0] is list2[0] ?",list1[0] is list2[0])   # True
print('-------')

print('---切片---')
list1 = [1, 2, 3]
list2 = list1[:]
print("浅外:list1 is list2 ?",list1 is list2)   # False
print("浅内:list1[0] is list2[0] ?",list1[0] is list2[0])   # True
print('-------')

print('---copy.copy()---')
list1 = [1, 2, 3]
list2 = copy.copy(list1)
print("浅外:list1 is list2 ?",list1 is list2)   # False
print("浅内:list1[0] is list2[0] ?",list1[0] is list2[0])   # True
print('-------')



# 浅拷贝存在的问题
print('---列表的深浅拷贝对比:浅拷使用list()---')
list1 = [[1, 2], (30, 40)]
list2 = list(list1)
print("浅外:list1 is list2 ?",list1 is list2)   # False
print("浅内:list1[0] is list2[0] ?",list1[0] is list2[0])   # True
list1.append(100)
print("list1:",list1)
print("list2:",list2)
list1[0].append(3)
print("list1:",list1)
print("list2:",list2)
list1[1] += (50, 60)
print("list1:",list1)
print("list2:",list2)
print('-------')
# 深拷贝不会出现这样的问题
list1 = [[1, 2], (30, 40)]
list2 = copy.deepcopy(list1)
print("深内:list1 is list2 ?",list1 is list2)   # False
print("深外:list1[0] is list2[0] ?",list1[0] is list2[0])   # False
list1.append(100)
print("list1:",list1)
print("list2:",list2)
list1[0].append(3)
print("list1:",list1)
print("list2:",list2)
list1[1] += (50, 60)
print("list1:",list1)
print("list2:",list2)
print('-------')



# 深拷贝存在的问题
print('---深拷贝存在的问题---')
list1 = [1]
list1.append(list1)   # 列表不能自己追加自己
print(list1)
list2 = copy.deepcopy(list1)   # 深拷贝也不行
print(list2)
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')






# 数字和bool
# 浅拷贝
print('数字和bool')
print('---数字的深浅拷贝对比---')
a = 1
b = a
print("浅:a is b ?", a is b)   # True
b = copy.deepcopy(a)
print("深:a is b ?", a is b)   # True
print(a, b)
a = 2
print(b)
b = 3
print(a)
print('---Boolean的深浅拷贝对比---')
a = True
b = a
print("浅:a is b ?", a is b)   # True
b = copy.deepcopy(a)
print("深:a is b ?", a is b)   # True
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')








# 元组和字符串这样的不可变类型不管什么方式都是浅拷贝
print('不可变类型')
print('---不可变类型的深浅拷贝对比---')
print('元组的深浅拷贝对比')
tuple1 = (1, 2, 3)
tuple2 = tuple(tuple1)
print("浅:tuple1 is tuple2 ?",tuple1 is tuple2)   # True
tuple2 = copy.deepcopy(tuple1)
print("深:tuple1 is tuple2 ?",tuple1 is tuple2)   # True
print('-------')

print('字符串的深浅拷贝对比')
s = 'hello'
s1 = s
print('浅:s is s1 ?', s is s1)   # True
s = copy.deepcopy(s1)
print('深: is s1 ?', s is s1)   # True
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
print('-------')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号