今日内容:

  • 1.垃圾回收机制
  • 2.re模块

一、垃圾回收机制

在计算机中,不能被程序访问到的数,称之为垃圾
1.1 引用计数
引用计数用来记录值的内存地址被记录的次数

每引用一次就对标记 +1 操作
每释放一次就对标记 -1 操作 当内存中的值的引用计数为 0 时,该值就会被系统的垃圾回收机制回收
1.2 引用计数的问题
# 例子
ls1 = [666]
ls2 = [888]
ls1.append(ls2)
ls2.append(ls1) 打印结果:
[666, [888, [...]]]
[888, [666, [...]]] # 首先该语句不会执行错误,但是不会一直执行下去,
# python解释器会对结果进行处理 # ps:内存中,赋值操作只是将值的内存地址给拷贝给了变量名
# 通过查找内存地址指向的内容将值找出来。
1.3 标记删除
标记:
标记的过程其实就是,遍历所有的GCRoots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中 删除:
删除的过程将遍历堆中所有的对象,将之前所有的内容全部清除
1.4 分代回收
分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)

    新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,
如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一, 当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长), 假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,
节省了扫描的总时间,接下来,青春代中的对象,
也会以同样的方式被移动到老年代中。
也就是等级(代)越高,被垃圾回收机制扫描的频率越低 回收:依然是使用引用计数作为回收的依据

2.正则表达式

2.1 什么是正则
正则就是带语法的字符串,用来匹配目标字符串得到想要的字符串结果
2.2 语法:
1.单个字符
\d == [0-9]
\D == [^0-9]
\w == 字母+数字+_
[0-9A-Za-z] == 所有字母+数字
. == 匹配所有单个字符(刨除换行)
import re
str1 = 'sfio29ia77y12飞范7发哦' # 匹配单个字符
print(re.findall(r'a', str1))
# ['a'] # 匹配数字 == '\d'
print(re.findall(r'[0-9]', str1))
# ['2', '9', '7', '7', '1', '2', '7'] # 匹配非数字 效果等同于 '\D'
print(re.findall(r'[^0-9]', str1))
# ['s', 'f', 'i', 'o', 'i', 'a', 'y', '飞', '范', '发', '哦'] print(re.findall(r'\D', str1))
# ['s', 'f', 'i', 'o', 'i', 'a', 'y', '飞', '范', '发', '哦'] # 匹配字母+数字+_
print(re.findall(r'\w', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '飞', '范', '7', '发', '哦'] # 匹配所有字母+数字
print(re.findall(r'[0-9A-Za-z]', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '7'] # 匹配所有单个字符(刨除换行)
print(re.findall(r'.', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '飞', '范', '7', '发', '哦']
# 2.多个字符

# zo* == zo{0,}
# zo+ == zo{1,}
# zo? == zo{0,1} import re str2 = 'sfizzjioa201jiszzzzzji45fzzja545ijf' # 匹配多个zz
print(re.findall(r'zz*', str2))
print(re.findall(r'zz{0,}', str2))
# ['zz', 'zzzzz', 'zz']
# ['zz', 'zzzzz', 'zz'] # 匹配一次或多次zz
print(re.findall(r'zz+', str2))
print(re.findall(r'zz{1,}', str2))
# ['zz', 'zzzzz', 'zz']
# ['zz', 'zzzzz', 'zz'] # 匹配0个或多个zz
print(re.findall(r'zz?', str2))
print(re.findall(r'zz{0,1}', str2))
# ['zz', 'zz', 'zz', 'z', 'zz']
# ['zz', 'zz', 'zz', 'z', 'zz']
# 3.多行
# ^: 以什么开头 $: 以什么结尾,结合 flags=re.M 可以按\n来完成多行匹配
# re.S:将\n也能被.匹配 re.I:不区分大小写
"""
"""
import re str3 = 'zhangsJIansHUfhn54\nlisi' # ^ 以什么开头
print(re.findall("^zhang", str3, flags=re.M))
# ['zhang']
# 4.分组
# 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组
import re
regexp = re.compile('(?:(http://)(.+)/)') # 生成正则对象
target = regexp.match('http://www.baidu.com/')
print(target.group(2)) # www.baidu.com # 5.拆分
print(re.split('\s', '12ssw 456\n789\t000'))
# ['12ssw', '456', '789', '000']
# 6.替换
# 1.不参与匹配的原样带下
# 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值\num拿到具体分组
# 4.其他字符串信息都是原样字符串
print(re.sub('([a-z]+)(\d+)(.{2})', r'\2\1', '《abc123你好》'))
# 《123abc》





Python 入门基础18 --re模块+内存管理的更多相关文章

  1. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  2. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  3. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  4. 【CUDA 基础】4.2 内存管理

    title: [CUDA 基础]4.2 内存管理 categories: - CUDA - Freshman tags: - CUDA内存管理 - CUDA内存分配和释放 - CUDA内存传输 - 固 ...

  5. Python 入门之 内置模块 -- re模块

    Python 入门之 内置模块 -- re模块 1.re 模块 (1)什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类 ...

  6. Python 入门之 内置模块 -- collections模块

    Python 入门之 内置模块 -- collections模块 1.collections -- 基于Python自带的数据类型之上额外增加的几个数据类型 from collections ​ 在内 ...

  7. Python 入门之 内置模块 -- sys模块

    Python 入门之 内置模块 -- sys模块 1.sys模块 sys模块是与python解释器交互的一个接口 print(sys.path) #模块查找的顺序 print(sys.argv) # ...

  8. Python 入门之 内置模块 -- datetime模块

    Python 入门之 内置模块 -- datetime模块 1.datetime模块 from datetime import datetime (1)datetime.now() 获取当前时间和日期 ...

  9. Objective-C 基础教程第九章,内存管理

    目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...

随机推荐

  1. HTML-XML数据解析

    HTML代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  2. 架构师成长之路6.6 DNS服务器搭建(构建企业级DNS)

    点击返回架构师成长之路 架构师成长之路6.6 DNS服务器搭建(构建企业级DNS) 采用LVS-DR模式负载均衡,多IDC,多套DNS集群,通过master-slave技术保证dns配置的一致性. 1 ...

  3. emWin 之 WM_SetCallback 创建回调函数

    @2018-7-11 [小记] emWin 通过函数 WM_SetCallback ( )  自定义回调函数 > 下段代码就是通过 MESSAGEBOX 控件的 OK 按键实现删除信息框的对话框 ...

  4. 在Android中afinal框架下實現sqlite數據庫版本升級的辦法

    public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫.   pub ...

  5. A1041. Be Unique

    Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...

  6. Web应用:当文件超过100KB,无法上传,有种原因你想象不到

    今天下午2点多,突然发现凡是文件超过100KB的,在上传的时候都会卡住,但低于100KB的文件可以上传成功. 服务器端使用的是asp无组件上传,为什么突然出现这种问题呢? 我们知道,IIS默认上传限制 ...

  7. 简单的使用gulp生成雪碧图

    有一个在线工具:https://www.toptal.com/developers/css/sprite-generator.生成雪碧图是极其方便的. 现在呢,我们来试试用gulp来生成雪碧图. 第一 ...

  8. Log4j 2X 日志文件路径问题

    关于路径问题网上说啥的都有,但是也不能说人家错,只能说不适合你这个. 一开始,我用的   ${webapp.root} <RollingFile name="rollingFileSy ...

  9. 【清北学堂2018-刷题冲刺】Contest 8

    Task 1:关联点 [问题描述]  ⼆叉树是⼀种常用的数据结构,⼀个⼆叉树或者为空,或者由根节点.左⼦树.右⼦树构成,其中左⼦树和右⼦树都是⼆叉树. 每个节点a 可以存储⼀个值val.  显然,如果 ...

  10. js模块化的两种规范AMD和CMD

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMDCMD 规范在这里:https://github.com/seajs/seajs/issues ...