不可变对象:该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
可变对象:该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址。
在python中,函数的参数都是对象的引用。如果在引用不可变对象中尝试修改对象,程序会在函数中生成新的对象 ,函数外被引用的对象则不会被改变。
数值类型(不可变对象):
字符串(不可变对象):
列表(可变对象):
不可变对象:数值类型,字符串,元组
可变对象:字典,列表
如果我们希望赋值时可变对象不进行引用,而是重新分配地址空间并将数据复制,我们可以利用Python的copy模块。其中主要的函数有 copy.copy和copy.deepcopy 。
- copy.copy 仅仅复制父对象, 不会复制父对象内部的子对象。
- copy.deepcopy复制父对象和子对象。