小数据池和深浅拷贝

小数据池

先执行代码块,不符合代码块才使用小数据池

数字
  1. 支持范围-5~256

  2. is 和 ==

    is:判断两个内存地址是否相同

    ==:判断两个值是不是相等

    is相同的,==一定成立

    ==相同的,is不一定成立

字符串
  1. 字符串在做乘法的时候总长度不能超过20
  2. 自己定义的字符串,长度不限制,字符串必须由数字,字母,下划线组成
  3. 特殊字符(中文除外)最多允许有一个驻留
  4. 字符串*1就是赋值

代码块

数字

全部驻留

字符串
  1. 字符做乘法,总长度不能超过20
  2. 自定义的都驻留
  3. 乘数为1的时候,是赋值
总结
  1. 小数据池--支持:str,int,bool

  2. 小数据池数字:-5~256

  3. 小数据池字符串:乘法时长度不能超过20

如何自己驻留:

需要使用python模块:from sys import intern:

集合

定义
  1. 集合就是个没有值的字典,遵循:唯一,无序,元素可哈希
  2. 集合是无序的
用法
    1. s.update()#迭代添加
    2. s.add()
    3. 不支持加法
    1. s.pop() #随机删除
    2. s.remove("元素") #通过元素删除
    3. del s #删除整个集合
    4. clear #清空
  1. 先删,再加

  2. for

  3. 去重

    原理时集合中的元素唯一

  4. 其他操作

    1. 差集 s1-s2
    2. 并集 s1 | s2
    3. 交集 s1 & s2
    4. 对称差集--反交集 s1 ^ s2
    5. print(s1 > s2) 超集 判断s2是不是s1的子集
  5. 冻结集合

    可变转换成不可变

    frozenset({1,2,3,4,5})

  6. 去重

    li=[]

    print(list(set(li)))

深浅拷贝

  1. 定义

    1. 赋值:用的是同一个地址

    2. 浅拷贝:只拷贝第一层

      会创建一个新的容器,两个列表公用一份地址

      修改不可变数据类型,不变动,修改可变数据类型,变动

    3. 深拷贝 :拷贝了之后,就和之前的拷贝目标没什么关系,地址不同,修改不变动

  2. 怎么用

     dic = {}   # "v":4
     li = []    #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}]
     for i in range(0,5):
         dic["v"] = i
         li.append(dic)
     print(li)
    
     深拷贝:
     import copy
     li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}]
     l2 = copy.deepcopy(li)
     li[-1]['k'] = "a"
     print(li)
     print(l2)
    
  3. 在哪用

    1. 不让修改原数据的时候
原文地址:https://www.cnblogs.com/li-dong-yu-95-11-21/p/11003658.html