第六节

1.小数据池

  1. ==,is,id

  • ==:查看等号两边的值是否一样

a = 9b = 9print(a == b) # 返回Truec = "dog"d = "dog"print(c == d) # 返回Truee = [1,2,3]f = [1,2,3]print(e == f) #  返回True
  • is:判断两边值的内存地址是否一样。

a = 9b = 9print(a is b) # 返回True
  • id:查看值的内存地址

    a = 9b = 9print(id(a),id(b)) # 返回1447461232 1447461232
  1. 小数据和代码块

    • 小数据池:这个在cmd终端中测试

      • 字符串:

        • 纯字母和数字的时候长度任意,内存地址相同。

        • Python36纯字母和数字乘法总长度 <= 20 内存地址相同。

        • Python37纯字母和数字乘法总长度 <= 4096 内存地址相同。

        • 中文和特殊符号乘法的时候只能乘以 0 内存地址相同

      • int:

        • -5 ~ 256

        a = -6b = -6print(a is b) # Falsec = 257d = 257print(c is d) # False
      • 布尔值:

        • True

        • False

    • 代码块支持:一个文件,一个函数,一个模块,一个类,终端中一行就是一个代码块

      • 字符串:

        • 定义字符串的时候内容,长度任意内存地址相同。

        • 字符串进行乘法的时候总长度 <=20 内存地址相同。

        • 中文,特舒符号 乘法的时候只能乘以1或 0

      • int:

        • -5~正无穷

        • 相同的数字内存地址相同

        a = -6b = -6print(a is b) # Falsec = 257d = 257print(c is d) # True
      • 布尔值:

        • 相同的内存地址相同

  • 小数据池,代码块同在的情况下先执行代码块

驻留机制: 节省内存空间,提升效率(减少了开辟空间和销毁空间的耗时)

2.集合

  • Python 的基础数据类型之一

  • 集合 ----- set

  • 定义方式:s = {1,2,3.4,5,6,7,8,9}

    • 空集合:s = set()

  • 天然去重

    • 删的重复的是后面的,先读取不删除

    • 元素要求是不可变的并且还是唯一的,我们就利用它是唯一来做去重

    • 会自动排序输出的集合,从左至右,由小到大

  • 无序,可变的数据类型

  • frozenset来保存数据

    s = frozenset(["赵本六", "刘大脑袋", "谢广坤", "老四"])dic = {s:'123'} # 可以正常使使用了print(dic)
  1. 增加

    • 集合名.add("元素")

    • 集合名.update("asdaf"),迭代添加,而且是随机进添去的

    • print(set("xuyu")) ,只能添加到空集合

      s = set()s.add("alex") # 直接添加print(s) # {'alex'}s.update("wusir")  # 迭代添加print(s) # {'s', 'r', 'alex', 'i', 'u', 'w'}print(set("xuyu")) # {'y', 'u', 'x'}
  2. 删除

    • 集合名.remove(元素)

      s = {1,2,3,4,5,6,7,8,9,0}print(s.remove(3))# 通过元素删除print(s.clear())# 留下的是空集合print(s.pop())#随机删除,默认因该是删除所有元素中最小的
    • 集合名.clear()

    • 集合名.pop()

    • 删了重新添加

    • for循环

      # set是一个可迭代对象. 所以可以进for循环
      for el in s:
       print(el)
      
    s1 = {"刘能", "赵四", "谢广坤"}
    s2 = {"刘科长", "王大拿", "谢广坤"}
    # 交集
    # 两个集合中的共有元素
    print(s1 & s2) # {'谢广坤'}
    print(s1.intersection(s2)) # {'谢广坤'}
    # 并集
    print(s1 | s2) # {'刘科长', '刘能', '王大拿', '谢广坤', '赵四'}
    print(s1.union(s2)) # {'刘科长', '刘能', '王大拿', '谢广坤', '赵四'}
    # 差集
    print(s1 - s2) # {'刘能', '赵四'} 得到第1个中单独存在的
    print(s1.difference(s2)) # {'刘能', '赵四'}
    # 反交集
    print(s1 ^ s2) # 两个集合中单独存在的数据 {'刘科长', '王大拿', '赵四', '刘能'}
    print(s1.symmetric_difference(s2)) # {'刘科长', '王大拿', '赵四', '刘能'}
    s1 = {"刘能", "赵四"}
    s2 = {"刘能", "赵四", "皮长山"}
    # 子集
    print(s1 < s2) # set1是set2的子集吗? True
    print(s1.issubset(s2))
    # 超集(父集)
    print(s1 > s2) # set1是set2的超集吗? False
    print(s1.issuperset(s2))
    

3.深浅拷贝

  1. 浅拷贝copy

    • 只拷贝第一层元素的地址,只有修改第一层的时候源数据不受影响

    • 给可变数据类型进行添加的时候源数据会受影响

    • = 是修改 .append是添加

    • copy适用于各种类型的数据

      切片可以适用于列表, 例 [:]

    赋值操作:将多个变量指向一个同一个内存地址就是赋值

    a = [1,2,3,4]
    b = a
    print(id(a),id(b)) # 38086472 38086472
    print(a is b)# True
    c = [1,2,3,4,5]
    d = c
    c.append(6)
    print(d)# [1, 2, 3, 4, 5, 6] 赋值元素发生改变,会直接输出改变后的
    e = [1,2,3,4,5]
    f = e
    e.append([6,7,8])
    print(f)[1, 2, 3, 4, 5, [6, 7, 8]]# 赋值元素发生改变,会直接输出改变后的
    

    copy操作

    #_________copy
    q = [11,22,33,44,55,[66,77,88]]
    w = q.copy() # w = q[:] # 浅拷贝
    print(id(q),id(w)) # 40118088 41916936地址发生改变,相当于新开辟空间,链接了[11,22,33,44,55]
    print(q is w) # False
    print(id(q[-1][0]))# 1369409680
    print(id(w[-1][0]))# 1369409680 地址一致
    q.append(9)
    print(q)# [11, 22, 33, 44, 55, [66, 77, 88], 9]
    print(w)# [11, 22, 33, 44, 55, [66, 77, 88]]  w先拷贝的q列表,没拷贝到添加后的
    
    a = [1,2,3,[4,5,6,[9,10]],67]
    b = a[:]
    b[-1] = 7
    print(a) #[1,2,3,[4,5,6,[9,10]],67] 不变
    print(b) # [1, 2, 3, [4, 5, 6, [9, 10]], 7]  多了一个7
    #   上下两种情况,赋值不会发生值的变化,添加会发生改变
    a = [1,2,3,[4,5,6,[9,10]],67]
    b = a[:]
    b[-2][-1].append(11)
    print(a)# [1, 2, 3, [4, 5, 6, [9, 10, 11]], 67]
    print(b)# [1, 2, 3, [4, 5, 6, [9, 10, 11]], 67]
    

2.深拷贝 copy.deepcopy(变量名)

  • 不可变数据类型内存地址共用,可变数据类型新开辟一个空间

    import copy  # 导入 copy模块
    a = [1,2,[3,4],5,6]
    b = copy.deepcopy(a)
    print(id(a[-3]))# 42293000
    print(id(b[-3]))# 42294408
    print(a)#[1, 2, 3, [4, 5], 6]
    print(b)#[1, 2, 3, [4, 5], 6]
    print(a == b)# True
    print(id(a),id(b))# 39933896 39935176
    print(a is b)# Galse
    

python_0基础开始_day06的更多相关文章

  1. python_0基础学习_day02

    第二节 一,while while也称为无限循环.死循环 while 条件: 缩进 循环体 应用领域:音乐播放:单曲循环,列表循环,随机播放(也是有规律的) 登陆界面:…… 数学计算:1~100的和, ...

  2. python_0基础学习_day01

    Python是一门动态解释型的强类型定义语言 一.变量 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止使用python的关键字(在pycharm中关键字明明变 ...

  3. python_0基础开始_day07

    第七节 1,基础数据类型补充 str: print(str.capitalize()) —— 首字母大写 print(str.title()) —— 每个单词的首字母大写 print(str.swap ...

  4. python_0基础开始_day03

    第三节 一.整形和布尔值的转换 int整型 python3: 全部都是整型 python2: 整型,长整型long 十进制转换二进制 # 将十进制的168转换为二进制 ​#得出结果 将十进制的168转 ...

  5. python_0基础开始_day05

    第五节 一.字典 python的数据结构之一 字典 —— dict 定义:dic = {"key":"dajjlad"} 作用:存储数据,大量,将数据和数据起到 ...

  6. python_0基础开始_day04

    第四节 一.列表 list 数据类型之一,存储大量的,不同类型的数据 列表中只要用逗号隔开的就是一个元素 有序可变的. 1.1列表的索引 列表和字符串一样也拥有索引,但是列表可以修改: lst = [ ...

  7. python_0基础开始_day13

    第十三节 一,匿名函数 匿名函数 == 一行函数 lambda == def == 关键字 函数体中存放的是代码 生成器体中存放的也是代码 就是yield导致函数和生成器的结果不统一 lambda x ...

  8. python_0基础开始_day12

    第十二节 一,生成器 生成器的核心:生成器的本质就是迭代器 迭代器是python自带的 生成器是程序员自己写的一种迭代器 在python中有三种方式来创建生成器: 基于函数编写 推导式方式编写 pyt ...

  9. python_0基础开始_day11

    第十一节 一,函数名的第一类对象 函数名当作值,赋值给变量 print(函数名) 查看看书的内存地址 函数名可以当作容器中的元素 lis = []dic = {}def func():    prin ...

随机推荐

  1. AcWing:165. 小猫爬山(dfs + 剪枝)

    翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...

  2. JavaWeb-SpringSecurity在数据库中查询登陆用户

    系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...

  3. DMA数据传输

    从字面意思上看,DMA即为“直接内存读取”的意思,换句话说DMA就是用来传输数据的,它也属于一个外设.只是在传输数据时,无需占用CPU. 高速IO设备可以在处理器安排下直接与主存储器成批交换数据,称为 ...

  4. UDP和TCP浅析

    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议. 在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较 ...

  5. Java - 自动装箱与拆箱详解

    1.装箱与拆箱 装箱,将基本数据类型转为包装类型.拆箱,将包装类型转为基本数据类型. // Byte, Short, Integer, Long, Double, Float, Boolean, Ch ...

  6. State Threads之编程注意事项

    原文: Programming Notes 1. 移植 State Thread 库可移植到大多数类 UNIX 平台上,但是该库有几个部分需要依赖于平台特性,以下列出了这些部分: 线程上下文初始化. ...

  7. Thymeleaf Multiple Template Locations using Spring Boot

    1. Overview In this tutorial, we'll see how we can define multiple template locations using Thymelea ...

  8. Java-JVM 自定义类加载器

    一.sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) public Launcher() { Launcher.ExtClassLoade ...

  9. 移动App双周版本迭代策略

    对于移动互联网产品来说,迭代的速度就是生命.我创业时做移动App时是一周一版,而现在是2周1版.相比起小公司,大公司迭代时间虽长,却更为不易,因为大公司流程更多,参与人数更多,需求更多,实现这样的快速 ...

  10. Java调用Redis集群

    前文 需要使用以下jar包 Maven项目引用以下配置: <dependency> <groupId>org.apache.commons</groupId> &l ...