找回密码
 立即注册
首页 业界区 安全 Python入门学习(三)

Python入门学习(三)

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册