1.深拷贝和浅拷贝
-
浅拷贝–copy.copy( )
只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“浅拷贝”,换句话说,浅拷贝仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变 -
深拷贝–copy.deepcopy( )
在计算机中开辟了一块新的内存地址用于存放复制的对象。 -
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值),引用
如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)
-
如果,用copy.copy( ) copy.deepcopy( )对一个全部是不可变类型的数据进行数据拷贝,那么它们的结果相同,都是引用
如果拷贝的是一个拥有可变类型的数据,那么deepcopy依然是深拷贝,而copy.copy还是指向
2.is和==的区别
id:在内存中存储的位置
type:变量的类型
value:变量的值
== :type,value
is:type,value,id
- 结论:
is 表示两个变量的值是否在同一块内存空间
== 表示的是值是否相等 - 总结: is 返回的值是True ==返回的一定是true
In [1]: a = '1'
In [2]: b = 1
In [3]: a == b
Out[3]: False
In [4]: a = '1'
In [5]: b = a