什么叫做可变与不可变类型呢
可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的
不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的
那么基本类型中哪些是可变类型哪些是不可变类型呢,让我们来一一验证
首先是int,当运行完后发现他的两个id发生了改变,那么int就是不可变类型。
x=10 print(id(x)) x=11 # 产生新值 print(id(x))
接着是float,当运行完后发现他的两个id发生了改变,那么float就是不可变类型。
=3.1 print(id(x)) x=3.2 print(id(x))
接着是str,当运行完后发现他的两个id发生了改变,那么str就是不可变类型。
x="abc" print(id(x)) x='gggg' print(id(x))
这里说下下,int、float、str被设计成了不可分割的整体,不能够被改变
下面是list类型,我们发现当他的值改变时,他的列表list的id没发生改变,所以list是可变类型。
l=['aaa','bbb','ccc'] print(id(l)) l[0]='AAA' print(l) print(id(l))
dict也是同理,所以dict是可变类型。定义:{}内用逗号分隔开多key:value,其中value可以是任意类型,但是key必须是不可变类型
dic={'k1':111,'k2':222} print(id(dic)) dic['k1']=3333333333 # print(dic) print(id(dic))
最后是bool,他只有true和false,你不可能把它改变,所以bool也是不可变类型。
条件
条件分为显式布尔值和隐式布尔值。显式布尔值就像比较运算符,他判断后会给你一个布尔值,当然true、false也是。
age = 18 print(age > 16) # 条件判断之后会得到一个布尔值 is_beautiful=True print(is_beautiful)
而隐式布尔值,他的所有的值都可以当成条件去用。其中0、None、空(空字符串、空列表、空字典)=》代表的布尔值为False,其余都为真。
逻辑运算符
逻辑运算符就是not、and、or。
not:就是把紧跟其后的那个条件结果取反。ps:not与紧跟其后的那个条件是一个不可分割的整体
print(not 16 > 13) print(not True) print(not False)
and:逻辑与,and用来链接左右两个条件,两个条件同时为True,最终结果才为真
print(True and 10 > 3)
or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,两个条件都为False的情况下,最终结果才为False
print(3 > 2 or 0)
而在优先级上not>and>or