小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址
小数据池----支持 str,int,bool
a = 1
b = 1
#id 查看空间的内存地址 获取开辟控件的一种地址
id(a)== id(b)
#数字范围 -5~256
代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都算一个代码块
在Python中是用字典的方式存储
is #判断两个内存地址是否相同
== #判断等号两边的值是否相同
字符串:
? 1.字符串在做乘法的时候总长度不能超过20,进行驻留
? 2.自己定义的字符串 长度不限制 字符串必须由数字,字母,下划线组成,进行驻留
? 3.特殊字符(中文除外)定义1个时候,进行驻留
? 4.字符串*1 其实就是赋值
代码块:
? 数字:全部驻留
? 字符串:
? 1.字符串做乘法的时候总长度不能超过20
? 2.自己定义的都驻留
? 3.乘数为1 就是赋值
? 4.Python3.7中乘法长度改为不超过4096
总结:
? 小数据池数字:-5~256 !!!
? 小数据池字符串:乘法的时候总长度不能超过20 !!!
? 小数据池----支持 str,int,bool
#怎么自己驻留?
#使用Python内置的模块
from sys import intern
a = intern("@@@@@@" * 20)
b = intern("@@@@@@" * 20)
结果为True
Python数据类型之一
set {1,2,3,4}
s = {1,2,3,4,"123",True,False,(1,2,3,4)}
print(s)>>>> {False, 1, 2, 3, 4, '123', (1, 2, 3, 4)}
#集合就是一个没有值的字典,遵循唯一,无序,元素要求可哈希(不可变)
#集合是可变的
#集合天然去重
增:
s = {1,2,3,4,"123",True,False,(1,2,3,4)}
s.update("456") #迭代添加
s.add("啊啊啊") #添加
删:
s = {1,2,3,4,"123",True,False,(1,2,3,4)}
s.pop() #删第一个
s.remove() #指定删除
del s #删除整个集合
s.clear #清空
改:
#删了重新添加
查:
for i in xxx
其他操作
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s1 - s2 = {1, 2} #差集
s1 | s2 = {1,2,3,4,5,6} #合集
s1 & s2 = {3,4} #交集
s1 ^ s2 = {1, 2, 5, 6} #反向交集&对称差集
s1 > s2 = False #超集 ----父集
s1 < s2 = False #子集
#冻结集合(可变 转换为 不可变) ----不常用
frozenset ({1,2,3,4,5})
? 1.去重
print(list(set(li)))
拷贝 -- copy 复制了一份儿
l1 = [1,2,3,4[5,6,7]]
l2 = l1 #赋值
l1 = [1,2,3,4[5,6,7]]
l2 = l1[:] #浅拷贝
l2 = l1.copy() #浅拷贝----只拷贝第一层元素
#浅拷贝会创建一个新的列表(容器),列表中的元素和原列表共用一个内存空间
import copy
li = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy
print(li)>>>>[1, 2, 3, 4, 5, [6, 7, 8]]
print(id(li))>>>>1420229662280
print(id(li[0]))>>>>1387364464
print(l2)>>>>[1, 2, 3, 4, 5, [6, 7, 8]]
print(id(l2))>>>>1420229663560
print(id(l2[0]))>>>>1387364464
#深拷贝 ---- 不可变的数据类型和原列表指向同一个内存空间
# 可变数据类型,会创建一个新的空间
? 1.不修改原数据的基础上进行操作
赋值:多个变量指向同一个内存地址
浅拷贝:只拷贝第一层元素,可变元素不动指向原先位置
深拷贝:全部拷贝 ---- 不可变数据类型指向的是原数据的内存地址
? -----可变数据类型会创建一个新的空间
? 赋值: 两个变量使用的是同一个空间
? 浅拷贝:修改不可变数据类型,不变动,修改可变数据类型,变动
? 深拷贝:修改就不变动
原文:https://www.cnblogs.com/lyoko1996/p/11005040.html