python的垃圾回收机制,深浅拷贝,字符编码,文件操作

【一】垃圾回收机制

回收变量所占用内存,节约资源
以引用计数为主,标记清除为辅,进行分代回收
(1)引用计数
(2)标记清除
定时扫描,没人引用就标记,准备回收
(3)分代回收
扫描时间
新生代:新创建没有被引用的
青春代:有经历过垃圾回收,这时然后没被引用
老年代:经历多次了,才扫描到没被引用

【二】深浅拷贝

利用copy模块的copy方法和deepcopy方法
(1)浅拷贝
  相当于新的引用了同一个内存地址的值,若修改了,也就表示着修改了内存地址的值,原表会变
(2)深拷贝
  相当于说重新给新的开辟了空间,只是刚好该值等于被拷贝的那个值,所以修改时,是不修改原表的

【三】字符编码

(1)发展历史
   1.一家独大--》ASICC码
     须知:a-z:97-122
          A-Z:65-90
          0-9:48-57
     由于计算机是美国发明的,所以ASICC码只有英文字符和数字
   2.诸侯割据--》各国都发明了自己的编码中国GBK,韩国Euc_kr等
     各个有各个国家的编码,那么容易出现编码混乱使用,出现乱码的现象
     GBK-->一个字节存英文字符
           两个字节存中文
   3.天下统一Unicode---》utf8
     合作开发了一个万国码
     记录所有国家字符的对应关系
     每个字符统一至少要两个字节存储
     缺点:unicode会浪费存储空间和IO时间
     所以开发了utf8
     优化了unicode存储数据的容量
            1bytes存储英文字符
            3bytes存储中文字符
            
如今:内存以Unicode--》硬盘是以utf-8
     颜文字--》utf8mb4
     Unicode可能会被淘汰,使用utf-8
(2)注意1:python2.7不完善,文件头要加coding:utf-8
(3)注意2:不要随意修改文件的编码格式,否则数据就回不来了
(4)解码decode
   将二进制数据变成字符,类似于翻译的意思
(5)编码encode
   将字符转成二进制数据,类似于加密的意思
 注意:你编码时用的什么编码格式,解码也要用该格式解码,否则会乱码

【四】文件操作

(1)文件打开的两种方法以及区别
    1.open(路径,打开文件的模式,编码格式)
    2.with语句
    eg:1.fp=open('1.txt','r','utf8')
       2.with open('1.txt','r','utf8') as fp
    区别在于后者,自动会关闭,前者不会关闭,必须要在代码末尾加上         
           fp.close()
(2)操作模式
    1.r只读模式,以只读方式打开文件;如果文件不存在,则会报错;
               文件指针将会放在文件的开头。
    2.w写覆盖模式,清空后写入,文件指针将会放在文件的末尾。
      要注意的点:1.文件存在则打开,没有则新建
                2.只要没有close(),一直write,内容接连往下连续写入
    3.a追加模式append,不会清空原文件内容;文件指针将会放在文件的末尾。
      要注意的点:1.文件存在则打开,没有则新建
                2.不带换行功能,只要没有close(),
                   一直write,内容接连往下连续写入
(3)文本编辑模式wt,rt,at文本图片
(4)二进制数据模式wb,rb,ab一般用于图片,视频
(5)文件操作的扩展模式
    1.r+:可读写,如果操作的文件不存在会报错,默认从光标所在位置开始写入
         除了读取还可以写入,其余同r,需要注意的是文件指针是在开头
    2.w+:除了写入还可以读取,其余同w,需要注意的是文件指针是在末尾。
         w+在打开文件时就会先将文件内容清空
    3.a+:除了写入还可以读取,其余同w,需要注意的是文件指针是在末尾。
(6)内置方法
   读
   1.read()一次性全读完
   2.readline()每次只读一行,指针移动到下一行的开头
   逐行遍历打印
   方法一一定要是读模式r
     for line in file:
        print(line.strip())
    方法二
    with open('file.txt', 'r') as f:
        line = f.readline()
        while line:
            print(line)
            line = f.readline()     
   3.readlines()把所有数据读出存到一个列表里
   4.readable()
   5.read(要读几个字符)
   写
   1.write()清空写入,只要打开文件就会清空不管你后续会不会写入东西
   2.writelines将元素逐个写入
(7)seek(偏移位置,模式(0-2))
   意思:光标以某模式的位置,偏移几个字符
   0:文件开头
   1:当前位置
   2:文件末尾
(8)tell()查看当前指针所在的索引位置,不允许有参数

【五】栈区和堆区

需要注意的点是
     1.栈区存放的时内存地址和变量名
     2.堆区存放的时变量值
     置于为什么是用堆存变量值
        由于变量值可能有的时候是要修改的,大小不定,并且堆的各个节点可以是任意大小,正好合适存变量值的条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值