第5章 变量与运算符
- """
- 下述代码注释是自己的理解
- 规范的解释如下:
- int/float为值类型的,是不可变的,不可变类型还有str/tuple等
- list/set/dict是引用类型,是可变的
- 简单说就是引用类型是可变的,值类型是不可变的
- """
- a = 1.1 #创建常量1的内存空间,使得变量a指向该地址
- b = a #使b也指向该地址
- a = 3.2 #再创建常量3的内存空间,使变量a指向该新内存地址
- print(a, b) #a变成3,b仍然为1
- a = [1, 2, 3, 4, 5] #创建存储列表信息的一块内存空间,使a指向该地址
- b = a #使b也指向该地址
- a[0] = "abc" #使得原存储列表信息的第一个元素改变
- #上述这句代码是创建一处新内存空间,使得列表第一个元素指向该地址
- #但变量a,b的指向仍为原列表的存储地址
- print(a, b) #b也就跟着变化了
- #再看下例
- a = [1, 2, 3, 4, 5] #创建存储列表信息的一块内存空间,使a指向该地址
- b = a #使b也指向该地址
- a = [1, 2, 3, 4] #创建一处新内存空间,使得变量a指向该新地址
- print(a, b) #a变了,b不变
复制代码- #灵活理解可变与不可变类型
- a = "hello"
- a = a + " python" #创建一处新内存空间存储相加后的新字符串,并让a指向该新字符串地址
- print(a) #a变了,但最初始的hello字符串仍然储存在内存中,可以用id()函数查看地址
- a = "hello"
- #a[0] = "s" 这里会报错,这就是不可变性
- print(a)
- t1 = (1, 2, 3, 4)
- #t1[0] = "s" 同样会报错
- print(t1[2])
- t1 = ([1,2], 10, 11, 12, [20, 30])
- print(id(t1[0]))
- t1[0][1] = 1 #这里却不会报错
- print(id(t1[0])) #因为第一个元素的内存地址没有变化
- print(t1) #t1的第一个元素值变化了,但t1各元素的指向没有变化
复制代码 #列表的可变与元组的不可变
- #列表的可变和元组的不可变
- a = [1, 2, 3]
- print(id(a))
- a[0] = "1"
- b = a
- print(id(a), id(b))
- a.append(4) #列表追加元素,a内容改变,指向不变
- print(a, id(a))
- #元组是不可变的,所以不能通过索引修改元素,也无法append()追加
- ta = (1, 2, 3, [1, 2, 4])
- print(ta[3][2])
- y = ta[1]
- print(id(y), id(ta[1]))
- #ta[1] = 10 这里会报错,元组的各个元素内容/指引是不可变的
- #这里创建一个新内存区域,让ta[1]指向该地址,但元组元素的指向是不可变的
- print(ta, id(ta), id(ta[3]))
- ta[3][2] = 18
- #上面这句可以执行,因为ta[3]的指向没有变
- #虽然元组第四个元素中的第三个元素内容变了,但元组第四个元素的指向并没有改变
- print(ta, id(ta),id(ta[3])) #地址与上面一致
复制代码 #运算符
- #运算符
- #成员运算符in / not in
- print("s" in "system")
- print(" " in "hello World!")
- print(18 in (9, 18, 27))
- print(1 not in [1, 2, 3])
- print(2 in range(3))
- print(20 in range(1, 20))
- print("A" in {"A":1, "B":2, "C":4}) #字典的成员判断是看key值
- print("D" not in {"A":1, "B":2, "C":4})
- #身份运算符 is /is not
- #可以理解为两个变量是否是同一内存指向
- a = 1
- b = 1 #b依然指向常量1的空间
- print(a is b)
- print(id(a), id(b)) #相同
- a = [1, 2, 3]
- b = [1, 2, 3] #新开辟空间,让b指向该处
- print(a is b)
- print(id(a), id(b)) #不同
- #判断变量是否为某一或某几种数据类型
- print(isinstance(1, int))
- a = [1, 2, 3]
- print(isinstance(a, (int, list)))
- print(isinstance(a, (int, float, str)))
- #位运算符:把数值转为二进制进行位运算操作
- #&按位与 |按位或 ^按位异或 ~按位取反 <</>>按位左/右移动
- a = 2 #10
- b = 7 #111
- print(a&b) #输出010,即十进制2
- print(a|b) #输出111,即十进制7
- print(a^b) #输出101,即十进制5
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |