zoukankan      html  css  js  c++  java
  • python--is/id==,集合,深浅拷贝

    ## 01 今日内容大纲
    
    1. is == id 用法
    
    2. 代码块
    
    3. 同一代码块下的缓存机制
    
    4. 不同代码块下的缓存机制(小数据池)
    
    5. 总结
    
    6. 集合(了解)
    
    7. 深浅copy
    
       
    
    
    
    
    
    ## 03 具体内容
    
    1. id is ==
    
       ```python
       # id 身份证号
       # i = 100
       # s = 'alex'
       # print(id(i))
       # print(id(s))
       # == 比较的是两边的值是否相等
       # l1 = [1, 2, 3]
       # l2 = [1, 2, 3]
       # print(l1 == l2)
       # s1 = 'alex'
       # s2 = 'alex '
       # print(s1 == s2)
       
       # is 判断的是内存地址是否相同
       # l1 = [1, 2, 3]
       # l2 = [1, 2, 3]
       # print(id(l1))
       # print(id(l2))
       # print(l1 is l2)
       
       s1 = 'alex'
       s2 = 'alex'
       print(id(s1))
       print(id(s2))
       print(s1 is s2)
       
       # id 相同,值一定相同
       # 值相同,id不一定相同
       
       
       
       ```
    
       ![1557120882292](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557120882292.png)
    
       ![1557120960898](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557120960898.png)
    
    2. 代码块
    
       + 代码块:我们所有的代码都需要依赖代码块执行。
       + 一个文件就是一个代码块。
       + 交互式命令下一行就是一个代码块。
    
    3. 两个机制: 同一个代码块下,有一个机制。不同的代码块下,遵循另一个机制。
    
    4. 同一个代码块下的缓存机制。
    
       + 前提条件:同一个代码块内。
       + 机制内容:pass
       + 适用的对象: int bool str
       + 具体细则:所有的数字,bool,几乎所有的字符串。
       + 优点:提升性能,节省内存。
    
       
    
    5. 不同代码块下的缓存机制: 小数据池。
    
       - 前提条件:不同代码块内。
       - 机制内容:pass
       - 适用的对象: int bool str
       - 具体细则:**-5~256数字**,bool,满足规则的字符串。
       - 优点:提升性能,节省内存。
    
       ```python
       # i1 = 1000
       # i2 = 1000
       # i3 = 1000
       # l1 = [1,2,3]
       # l2 = [1,2,3]
       # print(id(l1))
       # print(id(l2))
       # print(id(i1))
       # print(id(i2))
       # print(id(i3))
       
       i = 800
       i1 = 800
       s1 = 'hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中国'
       s2 = 'hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中国'
       print(i is i1)
       print(s1 is s2)
       ```
    
       ![1557121050553](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121050553.png)
    
    ​    ![1557121058450](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121058450.png)
    
    1. 总结:+
    
       1. 面试题考。
       2. 回答的时候一定要分清楚:同一个代码块下适用一个缓存机制。不同的代码块下适用另一个缓存机制(小数据池)
       3. 小数据池:数字的范围是-5~256.
       4. 缓存机制的优点:提升性能,节省内存。
    
    2. python基础数据类型之:集合 set。容器型的数据类型,它要求它里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}。
    
       + 集合的作用:
         + 列表的去重。
         + 关系测试: 交集,并集,差集,.....
         + pass
    
       ```python
       # 集合的创建:
       # set1 = set({1, 3, 'Barry', False})
       # set1 = {1, 3, '太白金星', 4, 'alex', False, '武大'}
       # print(set1)
       
       # 空集合:
       # print({}, type({}))  # 空字典
       # set1 = set()
       # print(set1)
       
       # 集合的有效性测试
       # set1 = {[1,2,3], 3, {'name': 'alex'}}
       # print(set1)
       
       # set1 = {'太白金星', '景女神',  '武大', '三粗', 'alexsb', '吴老师'}
       # 增:
       # add
       # set1.add('xx')
       # print(set1)
       
       # update迭代着增加
       # set1.update('fdsafgsd')
       # print(set1)
       
       #
       # remove
       # remove 按照元素删除
       # set1.remove('alexsb')
       #
       # print(set1)
       # pop 随即删除
       # set1.pop()
       # print(set1)
       
       # 变相改值
       # 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)
       
       # 子集
       # set1 = {1,2,3}
       # set2 = {1,2,3,4,5,6}
       # # print(set1 < set2)
       #
       # # 超集
       # print(set2 > set1)
       
       
       # 列表的去重 ***
       # l1 = [1,'太白', 1, 2, 2, '太白',2, 6, 6, 6, 3, '太白', 4, 5, ]
       # set1 = set(l1)
       # l1 = list(set1)
       # print(l1)
       
       # 用处:数据之间的关系,列表去重。
       ```
    
    3. 深浅copy(面试会考)
    
       ```python
       # 赋值运算
       # l1 = [1, 2, 3, [22, 33]]
       # l2 = l1
       # l1.append(666)
       # print(l1)
       # print(l2)
       
       # 浅copy
       # l1 = [1, 2, 3, [22, 33]]
       # l2 = l1.copy()
       # l1.append(666)
       # print(l1,id(l1))
       # print(l2,id(l2))
       
       
       # l1 = [1, 2, 3, [22, 33]]
       # l2 = l1.copy()
       # l1[-1].append(666)
       # print(id(l1[-1]))
       # print(id(l2[-1]))
       # print(id(l1[0]))
       # print(id(l2[0]))
       # print(l1)
       # print(l2)
       
       
       # l1 = [1, 2, 3, [22, 33]]
       # l2 = l1.copy()
       # l1[0] = 90
       # print(l1)
       # print(l2)
       
       
       
       # 深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)
       
       
       
       # 相关面试题;
       # l1 = [1, 2, 3, [22, 33]]
       # l2 = l1[:]
       # l1[-1].append(666)
       # print(l1)
       # print(l2)
       # 浅copy: list dict: 嵌套的可变的数据类型是同一个。
       # 深copy: list dict: 嵌套的可变的数据类型不是同一个 。
       ```
    
       ![1557121101538](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121101538.png)
    
    ![1557121118707](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121118707.png)
    
    ![1557121128548](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121128548.png)
    
    ![1557121141524](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121141524.png)
    
    ![1557121153427](C:UsersoldboyAppDataRoamingTypora	ypora-user-images1557121153427.png)
    
    ## 04 今日总结
    
    + id is == 三个方法要会用,知道是做什么的。
    + 回答的时候一定要分清楚:同一个代码块下适用一个缓存机制。不同的代码块下适用另一个缓存机制(小数据池)
    + 小数据池:数字的范围是-5~256.
    + 缓存机制的优点:提升性能,节省内存。
    + 集合:列表去重,关系测试。
    + 深浅copy:理解浅copy,深浅copy,课上练习题整明白。

    1. id == is:

    + == :数值是否相同 is:内存地址,id 获取对象的内存地址

    2. 代码块:一个文件,交互式命令一行就是一个代码块。

    3. 同一代码块下缓存机制(字符串驻留机制):

    + 所有数字,bool 几乎所有的字符串
    + 优点:提升性能,节省内存空间。

    4. 不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间存储-5~256的int,一个空间存储一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。

    + -5~256 int,bool,满足一定规则的字符串。
    + 优点:提升性能,节省内存空间。

    5. 集合:列表去重,关系测试 交并差。

    6. 深浅copy:

    + 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素共用一个。

    ![1557212618447](C:UsersoldboyAppDataRoamingTypora ypora-user-images1557212618447.png)

    ![1557212630446](C:UsersoldboyAppDataRoamingTypora ypora-user-images1557212630446.png)

    ![1557212642798](C:UsersoldboyAppDataRoamingTypora ypora-user-images1557212642798.png)

    ![1557212657357](C:UsersoldboyAppDataRoamingTypora ypora-user-images1557212657357.png)



  • 相关阅读:
    Golang的值类型和引用类型的范围、存储区域、区别
    ubuntu下ssh使用 与 SCP 使用
    ubuntu 搭建svn服务器
    Java中Math类的几个四舍五入方法的区别
    mongoDB 批量更改数据,某个字段值等于另一个字段值
    mongoDB 查询附近的人的语句
    mongodb常用操作语句
    JAVA 根据经纬度算出附近的正方形的四个角的经纬度
    JAVA 计算地球上任意两点(经纬度)距离
    Mongodb数据备份恢复
  • 原文地址:https://www.cnblogs.com/zengluo/p/13128940.html
Copyright © 2011-2022 走看看