内存管理与正则(re)模块
内存管理
垃圾回收机制
不能被程序访问到的数据,就称之为垃圾
也就是失去了一个能够访问到值数据的名称空间,导致在内存中无作为
引用计数:是内存管理的原理
引用计数是用来记录值的内存地址被记录的次数
每一次对值的地址的引用都可以使该值的引用计数+1
每一次对值的地址的释放都可以使该值的引用计数-1
当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收
循环导入
ls1=【666】
ls2=【888】
ls1.append(ls2)
ls2.append(ls1)
print(ls1)
print(ls2)
循环导入会导致内些值的引用计数永远大于0
标记删除
标记:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中
删除:删除的过程将遍历所有的对象,将之前所有的内容全部清除
优化机制:分代回收
分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
回收:依然是使用引用计数作为回收的依据
re 正则模块
什么是正则:正则就是带语法的字符串,用来匹配目标字符串得到想要的字符串结果
语法:
import re
findall 方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
# 三个参数
# pattern 匹配的正则表达式
# string 要匹配的字符
# flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
# 匹配成功re.match方法返回一个匹配的对象,否则返回None。 # 1.单个字符 # \w与\W
# print(re.findall('\w','hello_egon 123宁'))
# \w 匹配字符数字及下划线
# print(re.findall('\W','hello_egon 123宁'))
# \W匹配非字母数字下划线 #\s与S
# print(re.findall('\s','hello_egon 123宁'))
#匹配任意空白字符,等价于[\t\n\r\f]
# print(re.findall('\S','hello_egon 123宁'))
#匹配任意非空格字符串 # \d与\D
# print(re.findall('\d','hello_egon 123宁'))
# 匹配任意数字,等价于[0-9] \d
# print(re.findall('\D','hello_egon 123宁'))
# 匹配任意非数字 \D # [0-9A-Za-z] == 所有字母+数字
# print(re.findall(r'[A-Za-z0-9]宁',r'hello_egon 123宁')) #这是组合两个符合条件的字符串
# print(re.findall(r'[A-Za-z0-9宁]',r'hello_egon 123宁')) # . 匹配所有单个字符(刨除换行)
# print(re.findall('a.','a123b'))
# ==>['a1']
# print(re.findall('a.b','a1b'))
# ==>['a1b'] # 多个字符 # 匹配0个或多个的表达式 *
# print(re.findall('ab*','bbbbbbb'))
# ==》 []
# print(re.findall('ab*','a'))
# ==》 ['a']
# print(re.findall('ab*','abbbb'))
# ==> ['abbbb'] # 匹配1个或多个的表达式 +
# print(re.findall('ab+','bbbbbbb'))
# ==》 []
# print(re.findall('ab+','a'))
# ==》 []
# print(re.findall('ab+','abbbb'))
# ==> ['abbbb'] # 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 ?
# print(re.findall('ab?','a'))
# print(re.findall('ab?','abbb')) # {n}精确匹配n个前面表达式,并且只返回它前面的字符,多了返回空值。
# print(re.findall('ab{2}','abbbc'))
# ==》 ['abb'] # {n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式,并且只返回它前面的字符,最小值多了返回空值。
# print(re.findall('ab{1,2}','abbb'))
# ==》 ['abbb']
# print(re.findall('ab{1,}','abbbc'))
# ==》 ['abbb'] # a|b 匹配a或b
# print(re.findall('a|b','a b b cb'))
# ==> ['a', 'b', 'b', 'b'] # ()匹配括号内的表达式,也表示一个组
# print(re.findall('ab+','ababab123'))
# ==> ['ab', 'ab', 'ab']
# print(re.findall('(ab)+123','ababab123'))
# 匹配到末尾的ab123中的ab ==》 ['ab']
# print(re.findall('(?:ab)+123','ababab123'))
# findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容
# ==》 ['ababab123'] # print(re.findall('(zo){1,}','zozozozo'))
# ==> ['zo']
# print(re.findall('(?:zo){1,}','zozozozo'))
# ==> ['zozozozo'] # 3.多行
# ^: 以什么开头 $: 以什么结尾 结合 flags=re.M 可以按\n来完成多行匹配
# print(re.findall('^h','hello egon 123'))
# print(re.findall('3$','hello egon 123'))
# re.S:将\n也能被.匹配 re.I:不区分大小写 # 4.分组
# 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组 有名分组(?P<name>...) # regexp = re.compile('(?:(http://)\((.+)\)/)') # 生成正则对象
# target = regexp.match('http://(www.baidu.com)/')
# print(target.group(2))
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.split 拆分
# split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
# re.split(pattern, string[, maxsplit=0, flags=0])
# print(re.split('\s', '123 456\n789\t000'))
re.sub 检索和替换
Python 的re模块提供了re.sub用于替换字符串中的匹配项。
# 1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值\num拿到具体分组 4.其他字符串信息都是原样字符串
# print(re.sub('《(?:[a-z]+)(\d+)(.{2})', r'\\2abc\2\1', '《abc123你好》'))
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
内存管理与正则(re)模块的更多相关文章
- day 21 内存管理,正则
一.内存管理 1.垃圾回收 不能被程序访问到的数据,就称之为垃圾. 2.引用计数 引用计数是用来记录值得内存地址被记录的次数 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可 ...
- python基础——16(re模块,内存管理)
一.内存管理 1.垃圾回收机制 不能被程序访问到的数据,就称之为垃圾. 1.1.引用计数 引用计数是用来记录值的内存地址被记录的次数的. 每一次对值地址的引用都使该值的引用计数+1:每一次对值地址的释 ...
- rt-thread中动态内存分配之小内存管理模块方法的一点理解
@2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...
- 一个C语言内存管理模块的实现
C 内存管理模块的编写 C语言手动管理内存很困难,有时候很难发现内存泄漏,这两天看了一下里面有写了一个简单的内存管理模块,发现挺精巧,可以有效检测内存泄漏 原理很简单,就是把C的malloc函数分配的 ...
- PHP扩展-生命周期和内存管理
1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...
- Linux内核笔记——内存管理之slab分配器
内核版本:linux-2.6.11 内存区和内存对象 伙伴系统是linux用于满足对不同大小块内存分配和释放请求的解决方案,它为slab分配器提供页框分配请求的实现. 如果我们需要请求具有连续物理地址 ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- iOS经典面试题总结--内存管理
iOS经典面试题总结--内存管理 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被 ...
- DPDK内存管理(1)
1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口.下图展示了DPDK中内存有关的模块的相互关系. rte_eal 是统一 ...
随机推荐
- react解决roadhog buildDll 【转】
本地删了 node module 目录,重新安装的时候,提示 找了找,可如下解决 ------- 转自: https://www.cnblogs.com/huhanhaha/p/7605722.htm ...
- 网络I/O模型--05多路复用I/O
多路复用I/O模型在应用层工作效率比我们俗称的 BIO 模型快的本质原因是,前者不再使用操作系统级别的“同步 I/O”模型 . 在 Linux 操作系统环境下, 多路复用 I/O 模型就是技术人员通常 ...
- OG数据预处理
1.影像处理 ogCalcExtent --srs EPSG:26711 --inputdir D:/software/preprocess/data/bugaboos/ --filet ...
- linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户
修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...
- linux 用户配置文件及其相关目录
用户配置文件及其相关目录: /etc/passwd 用户信息文件/etc/shadow 影子文件/etc/group 组信息文件/etc/gshadow 组密码文件邮箱目录模板目录 /etc/pass ...
- 为website安装免费的letsencrypt证书
Certbot官网:https://certbot.eff.org 1. 安装certbot命令 wget https://dl.eff.org/certbot-auto chmod a+x cert ...
- idea 版本控制忽略文件、文件夹设置
setting 或者底部的 设置 忽略某个文件 后面选择框可以去选择 忽略某个文件夹 后面选择框可以去选择 忽略某种文件 后面输入填写如: *.txt
- 【gp数据库】查询系统表看模式下所有表的分布键信息
Greenplum是关系型的分布式数据库,需要存储的数据库在进入数据库时,将先进行数据分布的处理工作,讲一个表的数据平均分不到每个节点上,并为每个表指定一个分发列(distribute Column) ...
- Linux 系统级别优化_【all】
Linux 系统优化 1.Linux系统关闭SELinux 2.Linux系统开机到登录之前启动流程 3.Linux系统设置运行级别 4.Linux系统重要的开机自启动的服务 5.Linux查看系统当 ...
- Linux系统安全最小原则
系统安全最小原则 1.安装Linux系统最小化,选包最小化,不用就不安装2.开机服务最小化(5个)ssh network sysstat crontd rsyslog3.操作命令最小化 rm -rf ...