七天学会Python基础-第三天1/2

2021-05-28 18:01

阅读:434

标签:创建   code   float   ==   不可变   第一个   也会   类型   作用   

今日内容

  1. is,==,id,的用法

    • id(str),获取变量str在内存中的地址
    • a==b,判断a与b是都相等,返回bool类型
    • lst1 is lst2,判断str1与str2的内存地址是否相同
      • 值相同,代码不一定相同
  2. 代码块

    • 一个模块,一个函数,一个类,一个文件等都是一个代码块
    • 交互方式输入的每个命令都是一个代码块。
    • 我们所有的代码都需要依赖代码块来执行
  3. 两个机制:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制

    • 同一代码块下的缓存机制

      • 前提条件:在同一个代码块内
      • 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在,如果存在,会将其重用。换句话说:在执行同一个代码块时,遇到初始化对象命令时,它会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么他会重复使用字典中之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1,i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即id相同。
      • 适用对象:int(float),str,bool
      • 具体细则:所有的数字,bool,几乎所有的字符串
      • 优点:提升性能,节省空间

      技术图片

    • 不同代码块下的缓存机制(小数据池)

      • 前提条件:在不同的代码块中
      • 机制内容:
        • Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
        • python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象,而是使用在字符串驻留池中创建好的对象。
        • 其实无论是缓存还是字符串驻留池中,都是python做的一个优化,就是将-5~256的整数和一定规则的字符串放在一个池(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个池中引用,言外之意,就是内存之中创建一个。
      • 试用对象:int(float),str,bool
      • 具体细则:-2~256数字,bool,满足规则的字符串
      • 优点:
  4. 总结:

    • 面试考题:
      • 回答问题一定要分清楚:同一个代码块下使用一个缓存机制,不同代码块使用另一个缓存机制(小数据池)
      • 小数据池:数字的范围是-5~256
      • 缓存机制的优点:提升性能,节省内存。
  5. python基础类型之:集合set(了解)

    • 简介
      • 容器型的数据类型,他要求它里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}
    • 集合的作用
      • 列表的去重。
      • 关系测试:交集,并集,差集,...
    • 集合的创建
      • set1=set({1,2,False,"baby"})
      • set1={1,2,‘太白金星‘,‘alex‘}
      • 注意:集合中的值必须为不可变的(可哈希)数据类型
    • 集合的增删改查:
        • set1.add(),增加单个数据
        • set1.update(‘abc‘),迭代着增加
        • set1.remove(‘alex‘),按照元素删除
        • set1.pop(),随机删除一个元素
      • 改(变相改制)
        • 先把原来的元素删除,再增加一个
        • set1.remove(‘男神‘)
        • set1.add(‘女神‘)
    • 集合的其他操作
      • 交集
        • set1 & set2
        • set1.intersection(set2)
      • 并集
        • set1 | set2
        • set1.union(set2)
      • 差集
        • set1-set2,将set2中的元素从set1中减去
        • set1.difference(set2)
      • 反交集
        • set1^set2,得到set1和set2的并集减去set1和set2的交集
        • set1.symmetric_difference(set2)
      • 子集
        • set1
        • set2.issubset(set2)
      • 超集
        • set1>set2,判断set1是否是set2的超集
        • set1.issuperset(set2)
  6. 深浅copy

    • 简介:

      • 例如
      lst1=[1,2,3]
      lst2=lst1
      # 此时相当于将lst1映射给lst2,若修改了其中一个,另外一个也会随之改变
      # 若想让这两个列表互相不影响,就用到了copy...
      

      技术图片

    • 浅copy

      技术图片

      lst1=[1,2,3,[4,5,6]]
      lst2=lst1.copy()
      # 此时相当于将lst1进行了复制,粘贴给lst2,若修改了其中一个,不会影响另一个
      # 此时,lst1和lst2没有关系(id不同)了,但是他们两个里面的元素指向的仍然是相同的数据(id相同)
      
    • 深copy

      • 先引入copy模块,import copy,再使用其中的deepcopy()方法进行深copy
      • 深copy的特性就是将可变的数据类型在内存中重新创建一份,而不可变的数据类型沿用之前的
      import copy
      lst1=[1,2,3,[4,5,6]]
      lst2=copy.deepcopy(lst1)
      
    • 补充:

      • enumerate(lst1,start=1),返回多个由列表的索引和元素所构成的元组,若加上start=1则元组的第一个元素从1开始,默认从0开始,应用元组的拆包即可轻松分别获得列表中的索引和元素

七天学会Python基础-第三天1/2

标签:创建   code   float   ==   不可变   第一个   也会   类型   作用   

原文地址:https://www.cnblogs.com/doubledabo/p/14779198.html


评论


亲,登录后才可以留言!