Python入门学习(三)

第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
复制代码

 

posted @   tsembrace  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示