可变(mutable)参数和不可变(immutable)参数
在Python中string、tuple和number是不可变对象,而dict、list等是可变对象;不可变对象在进行重新赋值的时候,实际上市将原始值丢弃,将变量指向一个新值,可变对象的可变实质上是指更改可变对象中的子对象,比如list中的item元素的更改
直接赋值:其实就是对象的引用(别名)
image.png
image.png
浅拷贝
不拷贝子对象(针对子对象中的item),当子对象进行更改的时候,原始对象也会改变,常见操作,字典的copy()函数、copy模块的copy()函数(两个一模一样)
image.png
深拷贝
会拷贝子对象,当原始对象子对象进行更改的时候,原始对象不会改变
常见操作:copy()模块的deepcopy()函数
image.png
总结
- 利用切片操作和list方法拷贝等就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已
- 利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用
- 但是对于数字,字符串和元祖类型对象,没有拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是创建一个对象,替换掉旧的而已
网友评论