zoukankan      html  css  js  c++  java
  • python之小数据池和深浅拷贝

    小数据池

    小数据池支持的数据类型:int、str、bool(整型、字符串、布尔值)
    代码块:一个函数,一个py文件,终端的每一行都是代码块
    == 和 is的区别(id()查看内存地址)
    

    ​ == 是比较两端的值是否相等
    ​ is是比较两端的内存地址是否相等
    ​ print(id(a),id(b))查内存地址

    • 小数据池中

      • int:-5~256
      • str:
        1. 字母数字长度任意符合驻留机制
          ​ 2. 字符串进行乘法的时候,总长度不能超过20位
          ​ 3. 特殊符号进行乘法的时候只能乘零
    • 代码块中:

      • int:-5~正无穷
      • str:
        1. 定义字符串的时候可以是任意的
          ​ 2. 字符串(字母,数字)进行乘法是总长度不能超过20
          ​ 3. 特殊符号(中文,符号)进行乘法的时候只能乘以0或1

    驻留机制:节省空间,提高效率(减少了开辟空间和销毁空间的耗时间
    小数据池和代码块同时存在时,先执行代码块

    深浅拷贝

    • 浅拷贝:只拷贝第一层元素的地址,只有修改第一层(不可变类型)的时候原数据不受影响,给可变数量类型添加的时候原数量会受影响
    • 深拷贝:不可变数据类型共用,可变数据类型新开辟一个空间
    数字和字符串
    import copy
    
    ############# 数字和字符串 ##############
    n1 = 123
    n2 = 'mjc'
    n1_1 = n1 # 赋值
    n2_2 = n2 # 赋值
    print(id(n1), id(n1_1))
    >>4355288240 4355288240
    print(id(n2), id(n2_2))
    >>4358346040 4358346040
    n1_c = copy.copy(n1) # 浅拷贝
    n2_c = copy.copy(n2) # 浅拷贝
    print(id(n1), id(n1_c), id(n2), id(n2_c))
    >>4355288240 4355288240 4358346040 4358346040
    n1_d = copy.deepcopy(n1) # 深拷贝
    n2_d = copy.deepcopy(n2) # 深拷贝
    print(id(n1_d), id(n1), id(n2_d), id(n2))
    >>4355288240 4355288240 4358346040 4358346040
    

    ​ 对于字符串和数字,元组等不可变数据类型,赋值和深浅拷贝毫无意义,因为同时指向的是同一个内存地址

    其他数据类型

    ​ 对于字典、列表其他可变数据类型进行赋值、深拷贝 和浅拷贝时,内存地址是不同的

    1. 赋值
      赋值只是创建一个变量,该变量指向原来的内存地址
    2. 浅拷贝
      在内存中只额外创建第一层数据
    3. 深拷贝
      在内存中将所有的数据重新创建一份
  • 相关阅读:
    Golang Gin 实战(一)| 快速安装入门
    6 款最棒的 Go 语言 Web 框架简介
    Golang教科书般的web框架
    vgo简明教程
    go mod常用命令 已经 常见问题
    线程池原理讲解 Java专题
    Python 3.9安装与使用
    消息队列的基本概念
    实践——GIT安装(2021/05/01)
    vue2.0数据双向绑定原理分析及代码实现
  • 原文地址:https://www.cnblogs.com/python111/p/12363924.html
Copyright © 2011-2022 走看看