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

python浅拷贝,深拷贝和赋值

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

python浅拷贝,深拷贝和赋值

#浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
#深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过
#创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。
#python默认的是浅拷贝,深拷贝通过导入copy 使用copy.deepcopy()函数来实现深拷贝,copy.copy()函数是实现浅拷贝
#注意:(1)浅拷贝在子对象是不可变序列时,源和拷贝两者就是完全独立 但当子对象含可变序时,由于源和拷贝的子对象
#是相同的引用,改变其中一个另一个也随之改变
#(2)深拷贝就是通过某种方法创建一个新对象,他们的子对象也是不同的引用,相当于深拷贝的源和拷贝是完全独立的
#(3)而赋值 的两个对象的引用完全相同,他们等价

import copy
#ctrl + 点击可查看源码
list1=[[1,2,3],(4,5)]
#把list1浅拷贝给list2
list2=copy.copy(list1) #浅拷贝是创建了一个新的list对象,把id存到变量list2中,新对象的元素还是同一个对象的索引
print('list1和list2的id相同',id(list1)==id(list2))
print('list1和list2的子对象id相同',id(list1[0])==id(list2[0]),id(list1[1])==id(list2[1]))
print('list1',list1,'list2',list2)
#修改list1的第一个元素
list1[0].append('hhh')
print('list1',list1,'list2',list2)#打印发现list2的第一个元素也变了
#list1的第二个元素是元组,是不可以改变的  同不可变序列字符串一样,连接新的一部分后得到一个新的对象
a=id(list1[1])
b=id(list2[1])
print(f'原来list1[1]的地址{id(list1[1])}')
print(f'原来list2[1]的地址{id(list2[1])}')
list1[1]=(6,7)+list1[1]
print(id(list1[1])==a)
print(id(list2[1])==b)
print('list1',list1,'list2',list2)


#不同于赋值,赋值是原对象的引用,两者等价
list1 = [[1, 2], (30, 40)]
list2 = list1
print('list1赋给list2是把list1存的id同样存到list2中,两种存的id是相同的',list1==list2)
list1[1] += (50, 60)
print("list1:",list1)
print("list2:",list2)


#运行结果
'''
"D:code of pythonvenvScriptspython.exe" "D:/code of python/浅拷贝和深拷贝.py"
list1和list2的id相同 False
list1和list2的子对象id相同 True True
list1 [[1, 2, 3], (4, 5)] list2 [[1, 2, 3], (4, 5)]
list1 [[1, 2, 3, 'hhh'], (4, 5)] list2 [[1, 2, 3, 'hhh'], (4, 5)]
原来list1[1]的地址2843839849280
原来list2[1]的地址2843839849280
False
True
list1 [[1, 2, 3, 'hhh'], (6, 7, 4, 5)] list2 [[1, 2, 3, 'hhh'], (4, 5)]
list1赋给list2是把list1存的id同样存到list2中,两种存的id是相同的 True
list1: [[1, 2], (30, 40, 50, 60)]
list2: [[1, 2], (30, 40, 50, 60)]

Process finished with exit code 0

'''

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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