python 第六章
小数据池
# == 判断两边内容是否相等 a = 10 b = 10 print(a == b)# 判断a是否等于b # 输出 True # is 是 基于内存地址进行判断,用id判断 # 相同输出相同内容,否则输出id不同 # pring(id(数据类型)) # 查看内存地址 a = 10 b = 10 print(id(a)) # 输出4401028560 print(id(b)) # 输出4401028560 print(a is b) # 输出False # 代码块 -- 一个文件,函数,类,模块,终端的每一行 # 代码块支持范围: # 数字: # 同一代码块下,只要内容相同就采用相同的内存地址,-5以后就不是,正无穷 # 在做乘法的时候范围 -5~256 *** # 在做乘法的时候不能使用浮点系 # # 字符串: # 同一代码块下,只要内容相同就采用相同的内存地址 # 乘法的时候总长度不能超过20 # 乘法的时候中文,特殊符号只能乘以1或0 # # 布尔值: # 同一代码块下,只要内容相同就采用相同的内存地址 # # # 小数据池 -- 缓存机制(驻留机制) # 小数据池支持的范围 # 数字: # -5~256 *** # # # 字符串: # 同一代码块下,只要内容相同就采用相同的内存地址 # 乘法的时候总长度不能超过20 *** # 乘法的时候中文,特殊符号只能乘以0 # # 布尔值: # 同一代码块下,只要内容相同就采用相同的内存地址 # # 验证方法,必须脱离代码块才能验证 # # 优先级: # 代码块 > 小数据池(驻留机制) # 在终端中操作,不需要print,直接回车返回 # # 必会: # == 判断等号两边的值是否相等 *** # is 判断两边的内容地址是否相等 ***
深浅拷贝
# 赋值 : 数据完全共享 # 浅拷贝 : 数据半共享 # 深拷贝 : 数据完全不共享 # 赋值 l1 = [1,2,3,["aa","bb"]] l2 = l1 print(l1) print(l2) # 输出 # [1, 2, 3, ['aa', 'bb']] # [1, 2, 3, ['aa', 'bb']] # 修改元素 l2[0] = "aaa" l2[3][0] = "bbb" print(l1) print(l2) # 输出 # ['aaa', 2, 3, ['bbb', 'bb']] # ['aaa', 2, 3, ['bbb', 'bb']] # 浅拷贝 只拷贝第一层,第二层有变动,列表一起变动 ls1 = [1,2,3,["11","22","33"]] ls2 = ls1.copy()# 将ls1 的内容拷贝到ls2中 print(ls2) # 输出[1, 2, 3, ['11', '22', '33']] # 不可变的是int,srt,tuple # 可变的是list,set,dic # 修改不可变类型的值,变化的只有修改的列表生效 # 修改源列表的不可变类型的值,源列表变,新列表不变 ls1 = [1,2,3,["11","22","33"]] ls2 = ls1.copy() ls1[0] = 0 print(ls1) print(ls2) # 输出 lst1变 lst2不变 # [0, 2, 3, ['11', '22', 'aaa']] # [1, 2, 3, ['11', '22', 'aaa']] # 修改新列表的不可变类型的值,新列表变,源列表不变 ls1 = [1,2,3,["11","22","33"]] ls2 = ls1.copy() ls2[0] = 0 print(ls1) print(ls2) # 输出 lst1不变 lst2变 # [1, 2, 3, ['11', '22', 'aaa']] # [0, 2, 3, ['11', '22', 'aaa']] # 修改可变类型的值,源列表和新列表均生效 # 修改源列表可变类型的值,源列表变,新列表变 ls1 = [1,2,3,["11","22","33"]] ls2 = ls1.copy() ls1[3][2] = "aaa"# 修改ls2 中第4个元素-列表中的第3个元素 print(ls1) print(ls2) # 输出 都变 # [1, 2, 3, ['11', '22', 'aaa']] # [1, 2, 3, ['11', '22', 'aaa']] # 修改新列表可类型的值,源列表变,新列表变 ls1 = [1,2,3,["11","22","33"]] ls2 = ls1.copy() ls2[3][2] = "bbb"# 修改ls2 中第4个元素-列表中的第3个元素 print(ls1) print(ls2) print(id(l1[-1]) == id(l2[-1])) # 输出 都变 # [1, 2, 3, ['11', '22', 'bbb']] # [1, 2, 3, ['11', '22', 'bbb']] ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls1[-1]=10# 将列表看成一组,所以源不变 print(ls1) print(ls2) ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls2[-1]=11# 将列表看成一组,所以源不变 print(ls1) print(ls2) # id 内存地址的判断 # 浅拷贝: # 源列表和新列表的内存地址不一样 ls1 = [1,2,3,[11,22,33]] ls2 = ls1.copy() print(id(ls1) == id(ls2)) # 输出False # 源列表和新列表的第一层的内存地址一样 ls1 = [1,2,3,[11,22,33]] ls2 = ls1.copy() print(id(ls1[0]) == id(ls2[0])) # 源列表和新列表的第二层的内存地址一样 ls1 = [1,2,3,[11,22,33]] ls2 = ls1.copy() print(id(ls1[3]) == id(ls2[3])) # 深拷贝 拷贝所有,修改任意一个列表对另一个列表没有影响 import copy # 倒入copy类 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1)# ls2深拷贝ls1列表 print(ls1) print(ls2) # 输出 # [1, 2, 3, [11, 22, 33]] # [1, 2, 3, [11, 22, 33]] # 修改不可变类型的值,变化的只有修改的列表生效 # 修改源列表的不可变类型的值,源列表变,新列表不变 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) ls1[1] =11 print(ls1) print(ls2) # 输出 # [11, 2, 3, [11, 22, 33]] # [1, 2, 3, [11, 22, 33]] # 修改源列表的不可变类型的值,源列表不变,新列表变 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) ls2[1] =11 print(ls1) print(ls2) # [1, 2, 3, [11, 22, 33]] # [1, 11, 3, [11, 22, 33]] # 修改可变类型的值,变化的只有修改的列表生效 # 修改源列表可变类型的值,源列表变,新列表不变 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) ls1[3][2] = "aaa"# 修改ls2 中第4个元素-列表中的第3个元素 print(ls1) print(ls2) # 输出 # [1, 2, 3, [11, 22, 'aaa']] # [1, 2, 3, [11, 22, 33]] # 修改可变类型的值,变化的只有修改的列表生效 # 修改新列表可变类型的值,源列表不变,新列表变 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) ls2[3][2] = "aaa"# 修改ls2 中第4个元素-列表中的第3个元素 print(ls1) print(ls2) # 输出 # [1, 2, 3, [11, 22, 33]] # [1, 2, 3, [11, 22, 'aaa']] # id 内存地址的判断 # 深拷贝: # 源列表和新列表的内存地址不一样 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) print(id(1) == id(2)) # 输出False # 源列表和新列表的第一层的内存地址一样 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) print(id(ls1[0]) == id(ls2[0])) # 源列表和新列表的第二层的内存地址不一样 import copy ls1 = [1,2,3,[11,22,33]] ls2 = copy.deepcopy(ls1) print(id(ls1[3]) == id(ls2[3])) # 浅拷贝: # 只拷贝第一层,第二层有变动,列表一起变动 # 修改不可变类型的值,变化的只有修改的列表生效 # 修改可变类型的值,源列表和新列表均生效 # 修改和增删的区别 # 修改:只能改不可变数据类型,新开辟的不进行改变 # 增删改:使用可变数据类型,新开辟的进行改变 # # 深拷贝: # 拷贝所有,修改任意一个列表对另一个列表没有影响 # # id 内存地址的判断 # 浅拷贝: # 源列表和新列表的内存地址不一样 # 源列表和新列表的元素内存地址一样 # # # 深拷贝: # 源列表和新列表的内存地址不一样 # 源列表和新列表的第一层的内存地址一样 # 源列表和新列表的第二层的内存地址不一样 ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls2[-1][-1] = 8 print(ls1) print(ls2) ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls1[-1].append(10) print(ls1) print(ls2) ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls1[-1]=10# 将列表看成一组,所以源不变 print(ls1) print(ls2) ls1 = [1,2,3,[4,5,6]] ls2 = ls1.copy() ls2[-1]=11# 将列表看成一组,所以源不变 print(ls1) print(ls2)
集合
# 集合 -- set # 没有值的字典,只有键,无序,不支持索引 # 天然去重 *** # # 定义集合 s = {1,"alex",False,(1,2,3),12,1,12} print(s) # 输出{1,"alex",False,(1,2,3),12,1,12} lst = [1,2,1,2,4,2,45,3,2,45,2345,] print(list(set(lst)))# set先去重,set无序,去重后转换成list列表 # 输出[1, 2, 3, 4, 2345, 45] # 增:add update # s.add("键") 只能添加一个 s.add("键") print(s) # 输出{False, 1, 'alex', 12, '键', (1, 2, 3)} # s.update("键")迭代增加 s.update("abc") print(s) # 输出{False, 1, 'b', 'c', 'alex', 12, (1, 2, 3), 'a'} # 删:pop remove clear # s.pop()随机删 有返回值 s.pop() print(s) # 输出{1, 12, (1, 2, 3), 'alex'} # s.remove("键")指定元素删 s.remove(1) print(s) # 输出 {False, 'alex', 12, (1, 2, 3)} # s.clear()清空 --set() 空集合 s.clear() print(s) # 输出 () # 改: # 先删再加 # 查: # for i in s: # print(i) # 其他操作: s1 = {1,2,3,4,5,6,7} s2 = {5,6,7,1} # 取交集 # s1&s2 print(s1 & s2) # 交集 # 取并集 去重合并 # s1|s2 print(s1 | s2) # 并集 # 取差集 # s1-s2 print(s1 - s2) # 差集 # 反交集 对称差集 # s1^s2 print(s1 ^ s2) # 差集 # 父集 # s1 > s2 print(s1 > s2) # 父集(超集) # 子集 # s1 < s2 print(s1 < s2) # 子集 #冻结集合 frozenset(s1) # 用作与字典的键 dic={frozenset(s1):1} print(dic)
今日总结
小数据池
代码块:
一个文件、函数、类、模块,终端每一行代码
数字:-5~256
字符串:乘法总长不超过20
布尔值:内容相同内存地址相同
小数据池:
数字:-5~256
字符串:乘法总长不超过20
布尔值:内容相同内存地址相同
优先级:
先执行代码块,再执行小数据池
== 判断两边值是否相等
is 判断两边的内容地址是否相等
深浅拷贝
赋值:
多个变量名指向同一个内存地址
一个变量对其操作,其他变量查看时都变动
浅拷贝:
浅拷贝 -- lst[1:10]
只拷贝第一层元素
修改第一层元素时新开辟的不进行改变
深拷贝:
不可变的数据类型共用,可变的数据类型重新开辟一个空间
对源数据进行修改,深拷贝的内容不进行改变
集合
没用值的字典
无序,可变的
天然去重
增:add,update
删:pop,remove,clear
改:先删再加
其他操作
& | - ^ > <
交集 并集 差集 反差集 父集 子集
来源:https://www.cnblogs.com/zhangshan33/p/11178081.html