码迷,mamicode.com
首页 > 编程语言 > 详细

python基础4(小数据池,编码,深浅拷贝)

时间:2019-02-11 12:14:44      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:结果   共享   改变   mamicode   inf   亚洲   一个   字节   col   

1、==与is

  • == 比较值是否相等
  • is比较内存地址是否相同

 

2、小数据池

  • 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址
  • 数字范围:-5 ~ 256
  • num1 = 3
    num2 = 3
    i1 = id(num1)
    i2 = id(num2)
    #此时i1==i2

     

3、编码

  • ascii:     8位       1字节     表示一个字符
  • unicode:  32位     4字节     表示一个字符
  • utf-8
    • 英文    8位    1字节
    • 欧洲    16位  2字节
    • 亚洲    24位  3字节
  • gbk
    • 英文   8位    1字节
    • 中文   16位  2字节
  • 各个编码之间的二进制,是不能互相识别的,会产生乱码
  • 文件的传输,存储不能是unicode(只能是utf-8、utf-16、gbk、gb2312、ascii等)
  • python3中str是使用unicode编码的
  • 技术图片

     

 4、深浅拷贝

  • 原因:共享内存导致的结果
  • 如果通过赋值,使两个变量指向同一个内存地址(可变数据类型),则修改其中的一个,另一个也会跟着修改。如果是不可变数据类型(如字符串),修改一个另一个不会变
    li1 = [1,2,3]
    li2 = li1
    
    li2[0] = 2
    print(li)    # -> [2,2,3]
  • 浅拷贝:数据半共享,复制的数据独立存放在其他内存中,但是只复制第一层。如果是列表等可变数据类型,拷贝的是内存地址,所以修改这类元素,还是会全都改变
    li1 = [1,2,3,[4,5]]
    
    li2 = li1.copy()
    
    #修改第一层
    li2[0] = 3    #此时:li2 = [3,2,3,[4,5]]
                      #但li1未更改:li1 = [1,2,3,[4,5]]
    
    #修改其中的列表
    li2[3][1] = 9    #此时:li2 = [3,2,3,[4,9]]
                          #li1对应元素修改:li1 = [1,2,3,[4,9]]

    从内存来看:技术图片

  • 深拷贝:数据完全不共享,复制的数据完全独立放到另一个内存中,包括可变数据类型的内容
    import copy    #使用深拷贝需要导入copy
    li1 = [1,2,3,[4,5]]
    
    li2 = copy.deepcopy(li1)    #深拷贝
    
    #此时修改li2的所有元素,li1都不会改变
    li2[3][0] = 777    #li1仍是[1,2,3,[4,5]]

     

 

python基础4(小数据池,编码,深浅拷贝)

标签:结果   共享   改变   mamicode   inf   亚洲   一个   字节   col   

原文地址:https://www.cnblogs.com/walthwang/p/10361360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!