python 06 id is == set 深浅copy

01 今日内容大纲

  1. is==id用法
  2. 代码块
  3. 同一代码下的缓存机制
  4. 不同代码下的缓存机制(小数据池)
  5. 总结
  6. 集合(了解,但金融有时候会用到)
  7. 深浅copy

02 昨日回顾 is id ==

  1. 字典初识:

    • 查询速度快,存储大量的关联性数据
    • 键:是不可变数据类型,比如str bool int tuple,并且是唯一的
    • 值:可以是任意数据类型,对象
    • 字典3.5x之前是无序的,3.6x按照初始时的顺序排列,3.7之后是有序的
  2. 增删改查:
    • 增:setdefault(),dic[‘age‘]=18
    • 删:pop键(可以设置返回值),clear,del dic[‘name‘]
    • 改:dic[‘name‘]=‘alex‘
    • 查:dic[‘name‘] dic.get[‘name‘](不会报错)dic.keys() dic,values() dic.items()

03 具体内容

  1. id is ==

    • id 相同,值一定相同
    • 值相同,id不一定相同
  2. 代码块
    • 代码块:我们所有的代码都需要依赖代码块执行
    • 一个文件就是一个代码块
    • 交互式命令下一行就是一个代码块

      下面这两条可以用pycharm和解释器做对比解释

  3. 两个机制:同一个代码块下,有一个机制;不同的代码块下,遵循另一个机制
  4. 同一个代码块下的缓存机制
    • 前提条件:同一个代码块内
    • 适用对象:int bool str
    • 具体细则:所有的数字,,bool,几乎所有的字符串
    • 优点:提升性能,节省内存
  5. 不同代码块下的缓存机制:小数据池
    • 前提条件:不同代码块内
    • 适用对象:int bool str
    • 具体细则:-5~256数字,bool,满足规则的字符串
    • 优点:提升性能,节省内存
  6. 总结
    1. 面试题考
    2. 回答:同一代码块适用一个缓存机制;不同代码块适用另一个缓存机制(小数据池)
    3. 小数据池:数字的范围是-5~256
    4. 缓存机制的优点:提升性能,节省内存

04 集合set

  1. python基础数据类型:容器型的数据类型,他要求里面的元素是不可变的数据,但是他本事是可变的数据类型。集合的无序的 {}
  2. 集合的作用:
    • 列表的去重
    • 关系测试:交集 并集 差集
    • pass
      • set1.add(‘taibai‘)

      • 迭代增加

        set1.update(‘fdfdf‘)

        print(set1)

      • remove:按照元素删除

        set1.remove(‘alexsb‘)

      • pop:随机删除

        set1.pop()

    • 变相改值

      set1.remove(‘太白金星‘)

      set1.add(‘男神‘)

      print(set1)

    • 关系测试
      • 交集

        set1={1,2,3,4,5}

        set2={4,5,6,7,8}

        print(set1 &set2)

      • 并集

        print(set1 | set2)

      • 差集

        print(set1 - set2)

      • 反交集

        print(set1 ^ set2)

      • 子集

        print(set1 < set2)

      • 超集

        print(set2 > set2)

    • 列表的去重***

      l1=[]

      set1=set(l1)

      l1=list(set1)

05 深浅copy

  • 赋值运算

    • 锁壳。所以完全一样
  • 浅copy (面试题:列表的切片是浅copy)
    • 锁一层,往下随便造次不管。
    • 影分身:l1 l2如果值相等,但id不一致 注释:分身的l1 和 l2中相应的槽位是对应内存中生成的众多槽位中相对应的的槽位值
    • 在原列表添加或改变成别的元素相当于在众多内存的槽位中新占一个坑,跟锁的没关系
    • l1 = [1, 2, 3, [22, 33]]

      l2 = l1.copy()

      l1[0] = 90

      print(l1)

      print(l2)

  • 深copy
    • 至少锁两层
    • 影分身:id不一致。l1 l2如果值相等,id也不一致,但好像相等的机会不大
    • 在原列表添加或改变成别的元素相当于在众多内存的槽位中新占一个坑,跟锁的没关系
    • 深copy

      import copy

      l1 = [1, 2, 3, [22, 33]]

      l2 = copy.deepcopy(l1)

      print(id(l1))

      print(id(l2))

      l1[-1].append(666)

      print(l1)

      print(l2)

原文地址:https://www.cnblogs.com/miseryGOD/p/10820833.html

时间: 2024-10-09 11:59:01

python 06 id is == set 深浅copy的相关文章

Python学习(六)—— 深浅copy

一.浅copy 说明:只copy第一层的内存地址 示例: import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n3 = copy.copy(n1) 假设n1在内存中如下图表示 浅copy后,如下图所示 二.深copy 说明:copy除最后一层的内存地址 示例: import copy n1 = {"k1": &quo

python深浅copy探究

引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用: python中全部皆对象,Python中变量是指对象(甚至连type其本身都是对象,type对象)的引用,Python是动态类型,程序运行时候,会根据对象的类型来确认变量到底是什么类型. 我们有时候会见到这样一种情况: a = 1 b = a 这样做不就是把数据copy了一份吗,错,这样做只是在

python之深浅copy

三.深浅copy调用方法:import copy #浅拷贝copy.copy() 深拷贝copy.deepcopy() #赋值1. 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址.举例:import copy#字符串,数字a1 = 'adddddd'a2 = '12322'a2 = a1print(id(a1))print(id(a2))a3 = copy.deepcopy(a1)print(id(a1))print(id(a3))输出结果:4192344

python之旅 1-29 补充内容,深浅copy

#  l1 = [111,222,333,444,555] 将索引为奇数位的元素删除. # l1 = [111,222,333,444,555] # del l1[1::2] # print(l1) 通过删除列表中的元素 # for i in range(len(l1)-1,0,-1): # if i%2==0: # del l1[i-1] # print(l1) 通过循环列表,用range指代索引位置 for i in l1: if l1.index(i)%2==0: l2.append(i)

python之集合、深浅copy、文件操作、函数初识

本节内容:集合.深浅copy.文件操作.函数初识 1.小知识点补充 2.编码二 3.集合 4.深浅copy 5.文件操作 6.函数的初识 1.小知识点补充                                                                                           1.1 小数据池====str.int 小数据池存在的意义就是节省内存 节省内存,位多个变量开辟一个共享空间(str和int) int:-5--256 int===

python之数据类型补充、集合、深浅copy

一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址. 小数据池: 前提:int,str,bool 1,节省内存. 2,提高性能和效率. 小数据池是什么? 在内存中,创建一个'池',提前存放了 -5 ~256 的整数,一定规则的字符串和bool值. 后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建. 小数据池与代码块的关系

is == id 用法, 代码块,缓存机制,深浅copy,集合

01 内容大纲 is == id 用法 代码块 同一代码块下的缓存机制 不同代码块下的缓存机制(小数据池) 总结 集合(了解) 深浅copy 02 具体内容 1.id is == id是内存地址. 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是有一个唯一标识的,就好比是身份证号,标识这个空间的叫做内存地址,也就是这个数据(对象)的id.可以利用id()去获取这个数据的内存地址. == 是比较的两边的数值是否相等. is 是比较的两边的内存地址是

is == id 的用法;代码块;深浅copy;集合

1 内容总览 is == id 用法 代码块 同一代码块下的缓存机制 (字符串驻留机制) 不同代码块下的缓存机制 (小数据池) 总结 集合(了解) 深浅copy 2 具体内容 id is == # id 获取对象的内存地址,内存地址就相当于人的身份证号,唯一且不可变 # i = 100 # s = 'alex' # print(id(i)) #1892120688 # print(id(s)) #2707107640912 # == 比较的是两边的值是否相等 l1 = [1, 2, 3] l2

【python】-- 深浅copy、集合

深浅copy 1.数字.字符串的copy: 赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都一样,因为它们永远指向同一个内存地址: >>> import copy >>> n1 = 123 >>> print(id(n1)) #打印n1的内存地址 502665488 ##赋值## >>> n2 = n1 >>> print(id(n2)) 502665488 ##浅拷贝## >>>