python变量类型
- 可变数据类型:列表(list),字典(dictionary),集合(set)
- 不可变数据类型:字符串(str),数值(Number),元组(tuple)
其中:
可变数据类型是指变量所指向的内存地址处的值是可以被改变的,也就是说可变类型在赋值的时候copy的是地址或者引用
python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址
赋值
只是复制了新对象的引用,不会开辟新的内存空间。
深拷贝和浅拷贝都是对原对象的拷贝,都会生成一个看起来相同的对象,本质区别就是拷贝出来的对象的「地址」是否与原对象一样,即就是对原对象的地址的拷贝,还是值的拷贝
深拷贝
-
对原对象的地址的拷贝,新拷贝了一份与原对象不同的地址的对象,修改原对象中的任何值,都不会改变深拷贝的对象的值
-
深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。
浅拷贝
- 对原对象的值的拷贝,地址仍是指向原对象的地址,浅拷贝或者原对象的值发生变化,那原对象和浅拷贝对象的值都会随着被改变
- 创建新对象,其内容是原对象的引用。
浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用
深拷贝(深度克隆):不仅复制对象的基本类,同时也复制原对象的对象,完全是新对象产生的
1.copy.copy 浅拷贝——只拷贝对象,不会拷贝对象的引用对象,不会拷贝原始对象的内部的
2.copy.deepcopy 深拷贝——拷贝对象的值类型,还拷贝了原始对象,而产生了一个新的对象,不仅仅只拷贝了原始对象的引用
出处:
原文链接:
python深拷贝和浅拷贝的区别
python深拷贝和浅拷贝