首页 > 编程语言 > 详细

python之小数据池和深浅拷贝

时间:2020-02-25 21:57:58      阅读:80      评论:0      收藏:0      [点我收藏+]

小数据池

小数据池支持的数据类型: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. 深拷贝
    在内存中将所有的数据重新创建一份

python之小数据池和深浅拷贝

原文:https://www.cnblogs.com/python111/p/12363924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!