python--浅拷贝、copy浅拷贝、深拷贝的理解

在python中,对象赋值实际上是对象的引用,当创建了一个对象,然后把它赋值给另外一个变量的时候,并没有拷贝这个对象,只是单纯的引用,变量地址其实都是一样的。

1、浅拷贝
直接赋值默认是浅拷贝,指向地址相同,只要变量一个修改另外一个也会修改。

import copy
alist=[1, 2, 3, ['a', 'b']]
b=alist
print(id(alist))
print(id(b))
alist.append('sgz')
print(alist)
print(b)

结果--->>
2826619187336
2826619187336
[1, 2, 3, ['a', 'b'], 'sgz']
[1, 2, 3, ['a', 'b'], 'sgz']

2、copy浅拷贝
copy.copy浅拷贝,默认指向地址会改变,修改其公共区域并且为可变对象时,双方都会改变,但是非公共区域或非可变对象添加的东西互不影响。可变对象list、set、dict,其他均为不可变对象。

import copy
alist=[1, 2, 3, ['a', 'b']]
c=copy.copy(alist)
print(id(c))
print(id(alist))
alist.append("sgz")
print(c)
print(alist)
alist[3].append('test')
alist.append(['s','g','z'])
alist[-1].append('ss')
print(alist)
print(c)
结果--->>
1957471063752
1957470269576
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 'sgz']
[1, 2, 3, ['a', 'b', 'test'], 'sgz', ['s', 'g', 'z', 'ss']]
[1, 2, 3, ['a', 'b', 'test']]

3、深拷贝 copy.deepcopy
深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变。

posted @   starSgz  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示