is和==两种运算符在应用上的本质区别
- Python中对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
- is和==都是对对象进行比较判断作用的,并返回True|False,但对对象比较判断的内容并不相同。
- ==用来比较判断两个对象的value(值)是否相等,(type和value)
is也被叫做同一性运算符, 会判断id是否相同,(id, type 和value)
示例1:
特例:下图中小整数对象池是Python中的共享机制,为避免频繁申请和销毁内存空间做出的优化设计,范围 [-5, 257)这些整数对象是提前创建好的,且所有位于这个范围内的整数使用的均为同一个对象,不会被垃圾回收
深拷贝和浅拷贝的区别?/python中如何拷贝一个对象
赋值指创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。(=)
-
浅拷贝: 对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(li.copy(), copy.copy())
公用一个值;
这两个变量的内存地址一样;
对其中一个变量的值改变,另外一个变量的值也会改变; -
深拷贝: 一个变量对另外一个变量的值拷贝,递归拷贝。(copy.deepcopy())
两个变量的内存地址不同;
两个变量各有自己的值,且互不影响;
对其任意一个变量的值的改变不会影响另外一个;
示例1:
示例2:嵌套列表