什么是小数据池
小数据池就是python中一种提升效率的方式,固定数据类型,使用同一个内存地址python
小数据池 is和==的区别
== 判断等号俩边的值是否相同
is 判断两个内存地址是否相同app
小数据池和代码块的关系
注意 : 先执行代码块后执行小数据池函数
小数据池 : 支持str,int,bool
数字范围 : -5~256
字符串 : 1.在作乘法的时候总长度不能超过20
2.自定义的字符串,长度不限制,字符串必须(字母,数字,下划线)组成
3.特殊字符(中文除外)定义一个时候,进行驻留
4.字符串1,其实就是赋值code
代码块 : 一个文件,一个模块,一个函数,一个类
数字 : 所有驻留
字符串 : 1.字符串作乘法的时候总长度不能超过20
2.自定义的都驻留
3.字符串*1,其实就是赋值
4.python3.7 乘法的时候总长度不能超过4096内存
s = frozenset(["武当","少林","峨眉","丐帮"]) dic = {s:'123'} # 冻结s后就能够正常使用了 print(dic)
先了解如下什么是赋值rem
对于list, set, dict来讲, 直接赋值,实际上是把内存地址交给变量,并非复制一分内容,因此lst1的内存指向和lst2是同样的,lst1改变了,lst2也一样发生了改变.字符串
lst1 = ["武当","少林","峨眉","丐帮"] lst2 = lst1 print(lst1) print(lst2) lst1.append("师太") print(lst1) # ["武当","少林","峨眉","丐帮","师太"] print(lst2) # ["武当","少林","峨眉","丐帮","师太"] --------------------------------- dic1 = {"age":104,"name":"张三丰"} dic2 = dic1 print(dic1) # {"age":104,"name":"张三丰"} print(dic2) # {"age":104,"name":"张三丰"} dic1['name']="灭绝" print(dic1) # {"age":104,"name":"灭绝"} print(dic2) # {"age":104,"name":"灭绝"}
浅拷贝class
浅拷贝,只会拷贝第一层,二层的内容不会拷贝,因此被称为浅拷贝效率
lst1 = ["张三丰","方丈","乞丐"] lst2 = lst1.copy() lst1.append("灭绝") print(lst1) print(lst2) print(id(lst1), id(lst2)) # 两个lst彻底不同,内存地址和内容也不同,可是实现了内存的拷贝 --------------------------------- lst1 = ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]] lst2 = lst1.copy() lst1[3].append("灭绝") print(lst1) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]] print(lst2) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]] print(id(lst1[3]),id(lst2[3])) # id相同 # 只会拷贝第一层,二层的内容不会拷贝,所以第二层元素发生改变则都会改变.
深拷贝import
深度拷贝,把元素内部的元素彻底进行拷贝复制,一个改变另外一个不会跟着改变,当使用深拷贝时须要调用import copy.
import copy lst1 = ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]] lst2 = copy.deepcopy(lst1) lst1[3].append("灭绝") print(lst1) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]] print(lst2) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]] print(id(lst1[3]), id(lst2[3])) # id不一样 # 元素内部的元素彻底进行拷贝复制,一个改变另外一个不会跟着改变