一、可变、不可变的数据类型
python中主要有6种标准数据类型,分为可变和不可变两类。
不可变类型:该数据类型对象所指定内存中的值不可以被改变
在改变某个对象的值时,由于其内存中的值不可以被改变,所以,会把原来的值复制一份再进行改变,这样就会开辟一段新的内存空间来存储新的值。
可变类型:该数据类型的对象所指定的地址上面的值可以被改变
变量被改变以后,其所指向的内存地址上面的值直接被改变,没有发生复制行为,也没有发生开辟新的内存地址行为,不会重新开辟空间。
二、赋值、浅拷贝、深拷贝区别
首先需要明确,浅拷贝和深拷贝之间的区别只是用于容器对象(包含其他对象的对象,如列表或类的实例)。对于非容器对象没有区别,都是对象拷贝,相当于重新赋值,生成一个新的对象。
敲重点,面试时,下边三句回答即可!
- 简单的来说,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存。
- 深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。
- 应用copy.copy浅拷贝、copy.deepcopy深拷贝功能的时候,会根据当前拷贝的数据类型,可变类型和不可变类型有不同的处理方式。
(1)、对于不可变对象(数字、字符串、元祖),浅拷贝和深拷贝是没有区别的。
(2)、对于可变对象(列表、字典、集合),浅拷贝第一次层引用,而深拷贝是完全拷贝。
1、赋值——对象赋值实际上就是简单的对象引用
赋值:值不变,地址不变
copy浅拷贝和deepcopy深拷贝:值相等,地址不相等
2、浅拷贝——只拷贝父对象
浅拷贝是指拷贝的只是元对象元素的引用
浅拷贝的代码实现
import copy
b = copy.copy(a)
3、深拷贝——完全拷贝父对象及其子对象
深拷贝是指被赋值的变量开辟了另一块地址用来存放要赋值的变量的值,深拷贝的应用主要是希望在改变新的对象的时候,不要改变原对象。
深拷贝的代码实现
import copy
b = copy.deepcopy(a)