一 深浅拷贝
1) 可变对象: 列表'list'、字典'dict'、集合'set'.
2) 不可变对象: 数字'digit'、字符串'string'、元组'tunple'
++++++++++++++"深、浅体现"++++++++++++++
通俗解释:深拷贝是'内容'拷贝,浅拷贝是'地址[引用]'拷贝
区别点:
1) 深拷贝会创建一个'新的内存空间',拷贝的'值是一样'的,但是内存地址不一样.
2) 浅拷贝只是拷贝指向原来对象的地址,使'原对象'的'引用计数+1'
1)初始化
2)浅拷贝
浅拷贝:是指把存放'变量的地址值'传给被赋值,是'地址[引用]'拷贝 -->'id进行验证'
换句话:如果'浅拷贝'中,'被拷贝的对象'包含'可变对象',拷贝'后'和拷贝'前'的对象之间还有'关联';否则没有关联
a.copy和copy.copy(a)完成'相同的'效果
copy浅拷贝:没有拷贝子对象,所以原始数据改变,'子对象会改变' --> "表层"
++++++++++++++++"直接赋值"++++++++++++++++
直接赋值: 传递的是该对象的'地址' --> 'b=a'
浅拷贝:传递的是该对象中的'子对象'的地址
说明:'浅拷贝'拷贝的是'子对象的地址' --> 'id不变'
浅拷贝:子对象是'可变'和'不可变'的区别?
可变:由于是'地址'引用,所以"一荣俱荣,一损俱损" --> "动态[可修改]变化"
不可变:无法'修改'
3)深拷贝
备注: 核心是'内层对象'的地址是否一样,区分'浅拷贝',这里'不再赘述'
4)对比
关注点: '不可变'原组和'可变列表'的'深'拷贝、'浅'拷贝区别
思考: 为什么'纯元组',深浅拷贝'都一致' --> 对于'不可变对象'的拷贝,对象的引用并'没有发生变化'
思考: '非纯元组',深浅拷贝的'区别'
5)小结