解惑解惑 python3 可变类型与不可变类型可变类型与不可变类型 ,, is 与与 == 区别区别 ,, 变量变量
赋值、深拷贝与浅拷贝赋值、深拷贝与浅拷贝
一、可变类型与不可变类型一、可变类型与不可变类型
((1)可变类型()可变类型(mutable):列表、字典、集合):列表、字典、集合
((2)不可变类型()不可变类型(unmutable):数字、字符串、元组):数字、字符串、元组
简单点说:可变对象就是允许对自身进行修改;不可变对象不允许对自身进行修改,如果修改了就不是原来的对象了,我们可
以用内置函数 id() 来判断!!!
注意:这里的可变不可变指的是内存中的那块内容(value)是否可以被改变。如果是不可变类型的话,在对对象本身操作的
时候,必须在内存中新申请一块区域(因为老区域不可变)。如果是可变类型,在对对象操作的时候,不需要在其他地方申请
内存,只需要在此对象后面连续申请(+ / -)即可,也就是它的address会保存不变,但是区域会边长或变短。
可以使用内置函数 id() 来确认对象的身份在两次赋值前后是否发生变化。
不可变类型有什么好处?如果数据是不可变类型,当我们把数据传给一个不了解的API时,可以确保我们的数据不会被修改。
如果我们要操作一个从函数返回的元组,可以通过内置函数 list() 把它转换成一个列表。(当被问到列表和元组的区别时,可
以说这个!!!)
二、二、== 与与 is 在对象间的比较在对象间的比较
(1) == 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。默认会调用对象的__eq__()方法
(2)is 比较的是两个实例对象是不是完全相同,他们是不是同一个对象,占用的内存地址是不是一样的。即比较id是否相同
简单点来说:简单点来说:
(1) == 比较操作符是用来判断两个对象的 value是否相等。
(2) is 同一性操作符是用来判断两个对象的 id是否相同
(3)注意:is 运算符比==效率高,在变量和None进行比较时,应该使用is
例子:例子:
>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> a = 257 #a和b为数值类型
>>> b = 257
>>> a is b
False
>>> a == b
True
>>> a = 'python' #a和b为字符串类型
>>> b = 'python'
>>> a is b
True
>>> a == b
True
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a == b
True
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3] >>> a is b
False