zoukankan      html  css  js  c++  java
  • 2020年4月8日python学习笔记————补充内容 编码的关系 & copy功能原理

    bytes:

    定义bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型

    bytes的作用:

    计算机只能存储2进制, 我们的字符、图片、视频、音乐等想存到硬盘上,也必须以正确的方式编码成2进制后再存

    对于文字,我们可以以gbk编码,也可以以utf-8、ASCII编码。

    对于图片,必须编码成PNG,JPEG等格式

    对于音乐,必须编码成MP3,WAV等

    备注:在python中,字符串必须编码成bytes后才能存到硬盘上。 我之前学的文件操作时也没有把字符串编码后再存呀, 哈,那是python默认帮你干了这个事,在python3中文件存储的默认编码是utf-8.

    以二进制模式操作文件:

    f = open(file="encode_test",mode="wb") # wb以2进制模式打开文件

    2进制模式打开文件有

    wb 二进制创建

    rb 二进制读

    ab 二进制追加

    字符编码的转换

    定义:编码转换是指将一种编码转成另外一种编码,比如 utf-8 to gbk。

    为何需要编码转换呢?

    因为不同操作系统编码不同, utf-8在win上没办法直接看,因为windows是GBK编码的,得转成gbk。 反过来如果你的GBK字符相在LinuxMac上正常显示,就得转成utf-8编码。

    编码&解码

     备注:

    在py3里,内存里的字符串是以unicode编码的,unicode的其中一个特性就是跟

    所有语言编码都有映射关系。所以你的utf-8格式的文件,在windows电脑上若是不能看,就可以把utf-8先解码成unicode,再由unicode编码成gbk就可以了。

    注意,不管在Windows or Mac or Linux上,你的pycharm IDE都可以支持各种文件编码,所以即使是utf-8的文件,在windows下的pycharm里也可以正常显示

    # 浅拷贝:copy
    # data = {
    #     "name":"alex",
    #     "age":18,
    #     "scores":{
    #         "语文":130,
    #         "数学":60,
    #         "英语":98,
    #     }
    # }
    # # d2 = data
    # # data["age"] = 20
    # # print(d2)
    # # print(id(d2))#18522736
    # # print(data)
    # # print(id(data)) #18522736
    # # 为何是20呢?
    # #  因为d2=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存的地址的。d2,data会一直共享这个dict里的数据,
    #
    # d2 = data.copy()#s使用浅拷贝,出现内存地址不一样
    # data["age"] = 20
    # print(d2)
    # print(id(d2))#18522304
    # print(data)
    # print(id(data))#18522736
    #
    # # 结论:这样就相当于是2份独立数据了, 但是为什么这个语法叫做浅copy呢? 你改一下score里的值 就知道了。
    
    # data = {
    #     "name":"alex",
    #     "age":18,
    #     "scores":{
    #         "语文":130,
    #         "数学":60,
    #         "英语":98,
    #     }
    # }
    # d2 = data.copy()
    # data["age"] = 20
    # data["scores"]["数学"] = 77
    # print(d2)
    # print(id(d2))
    # print(data)
    # print(id(data))
    
    # 结果:
    # {'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
    # 18325696
    # {'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
    # 18326128
    
    # 看输出 , 很神奇,两个Dict里age的值是独立的,但score字典里的分数值貌似是共享的
    
    # 因为浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份。
    
    # 深拷贝:copy
    
    # 若你想彻底使上面的2个dict完全独立,无论有多少层数据。那就要用python工具包里的一个工具了,
    # import copy
    # data = {
    #     "name":"alex",
    #     "age":18,
    #     "scores":{
    #         "语文":130,
    #         "数学":60,
    #         "英语":98,
    #     }
    # }
    # d3 = copy.deepcopy(data)
    # d3["scores"]["数学"] = 77
    # print(d3)
    # print(id(d3))
    # print(data)
    # print(id(data))
    
    #数学修改了值
    # {'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
    # 49320512
    # {'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
    # 47882864
    # 备注:必须确保你的2个复制出来的dict,list必须是独立的了。
    

      

     

  • 相关阅读:
    qemu进程页表和EPT的同步问题
    Linux进程虚拟地址空间管理2
    qemu-kvm内存虚拟化1
    LInux进程虚拟地址空间的管理
    Linux下的文件系统2
    LInux中的文件系统1
    Linux IPC之管道通信
    操作系统中的特权级检查
    Linux下的信号机制
    进程的挂起、阻塞和睡眠
  • 原文地址:https://www.cnblogs.com/jianchixuexu/p/12662624.html
Copyright © 2011-2022 走看看