Python全栈-第六课 学习笔记

Python第六课 学习笔记

is id ==

  • is 判断的是内存地址是否相同
  • id 获取的是内存中的地址
  • == 比较的是两边的值是否相等
  • id 相同,值必定相同
  • 值相同,id不必定相同

代码块

  • Python程序是由代码块构造的。块是一个python程序的文本,他是做为一个单元执行的。代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。而做为交互方式输入的每一个命令都是一个代码块。
  • 代码块:咱们全部的代码都须要依赖代码块执行。
  • 一个文件就是一个代码块。
  • 交互式命令下一行就是一个代码块。

两个机制(了解便可,不用深究)

  • 同一个代码块下,有一个机制。不一样的代码块下,遵循另外一个机制。python

  • 同一个代码块内的缓存机制:字符串驻留机制缓存

    • 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,若是存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,若是有一样的记录那么它会重复使用这个字典中的以前的这个值。因此在你给出的例子中,文件执行时(同一个代码块)会把i一、i2两个变量指向同一个对象,知足缓存机制则他们在内存中只存在一个,即:id相同。
    • 使用的对象:int bool str
    • 具体细则:全部的数字,bool,几乎全部的字符串。
    • 优势:提高性能,节省内存。
  • 不一样代码块下的缓存机制:小数据池。app

    • 机制内容:Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会从新建立对象,而是使用已经建立好的缓存对象。函数

      python会将必定规则的字符串在字符串驻留池中,建立一份,当你将这些字符串赋值给变量时,并不会从新建立对象, 而是使用在字符串驻留池中建立好的对象。性能

        其实,不管是缓存仍是字符串驻留池,都是python作的一个优化,就是将~5-256的整数,和必定规则的字符串,放在一个‘池’(容器,或者字典)中,不管程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之建立一个。学习

    • 使用的对象:int bool str测试

    • 具体细则:-5~256数字,bool,知足必定规则的字符串。优化

    • 优势:提高性能,节省内存。code

集合(用的比较少)

  • 集合set:容器型的数据类型,它要求里面的元素是不可变的数据,但它自己是可变的数据类型。集合是无序的。{2,3}。对象

  • 集合的做用:

    • 列表的去重。
    • 关系测试:交集,并集,差集,.....
  • 集合的建立

  • #方式一(不经常使用)
    set1 = set({1,2,'jarvis',False})
    #方式二(通常使用)
    set1 = {1,2,'jarvis',False}
    #空集合
    set1 = set()
    set1 = {}    	#空字典
  • set1 = {'one','two','three','four','five'}
    #方式一
    set1.add('six')
    #方式二(迭代着增长,分别增长a、b、c)
    set1.update('abc')
  • set1 = {'one','two','three','four','five'}
    #方式一(remove,按照元素去删除)
    set1.remove('five')
    #方式二(pop,随机删除)
    set1.pop()
  • 变相改值(先删除后增长)

  • set1 = {'one','two','three','four','five'}
    set1.remove('one')
    set1.add('1')
  • 交集运算

  • set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 & set2)
  • 并集运算

  • set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 | set2)
  • 差集运算

  • set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 - set2)
  • 反交集运算

  • set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 ^ set2)
  • 子集

  • set1 = {1,2,3,4,5}
    set2 = {1,2,3,4,5,6,7,8}
    print(set1 < set2)
  • 超集

  • set1 = {1,2,3,4,5}
    set2 = {1,2,3,4,5,6,7,8}
    print(set2 > set1)
  • 列表的去重

  • ll = [1,1,2,2,2,3,3,3,4,5,6,6,6]
    set1 = set(ll)
    ll = list(set1)
    print(ll)
  • 关系测试

  • 用处:数据之间的关系,列表去重。

深浅copy

  • 赋值运算

  • l1 = [1,2,3,[4,5]]
    l2 = l1
    l1.append(6)
    print(l1)
    print(l2)
  • 浅copy(list dict:嵌套的可变的数据类型是同一个)

  • 总结:在内存中开辟一个新的空间存放copy的对象(列表,字典),可是里面的全部元素与被copy对象的里面的元素共用一个。

  • l1 = [1,2,3,[4,5]]
    l2 = l1.copy()
    l1.append(6)
    print(l1)
    print(l2)
  • l1 = [1,2,3,[4,5]]
    l2 = l1.copy()
    l1[-1].append(6)
    print(id(l1[-1]))
    print(id(l2[-1]))
  • 深copy(python对深copy作了一个优化,将不可变数据类型沿用同一个。)

  • 总结:深copy则会在内存中开辟新空间,将原列表以及列表里面的可变的数据类型从新建立一份,不可变数据类型则沿用以前的。

  • import copy
    l1 = [1,2,3,[4,5]]
    l2 = copy.deepcopy(l1)
    l1[-1].append(6)
    print(l1)
    print(l2)
相关文章
相关标签/搜索