内存管理

垃圾回收机制

不能被程序访问到的数据,就称之为垃圾

也就是失去了一个能够访问到值数据的名称空间,导致在内存中无作为

引用计数:是内存管理的原理

引用计数是用来记录值的内存地址被记录的次数

每一次对值的地址的引用都可以使该值的引用计数+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)模块的更多相关文章

  1. day 21 内存管理,正则

    一.内存管理 1.垃圾回收 不能被程序访问到的数据,就称之为垃圾. 2.引用计数 引用计数是用来记录值得内存地址被记录的次数 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可 ...

  2. python基础——16(re模块,内存管理)

    一.内存管理 1.垃圾回收机制 不能被程序访问到的数据,就称之为垃圾. 1.1.引用计数 引用计数是用来记录值的内存地址被记录的次数的. 每一次对值地址的引用都使该值的引用计数+1:每一次对值地址的释 ...

  3. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

  4. 一个C语言内存管理模块的实现

    C 内存管理模块的编写 C语言手动管理内存很困难,有时候很难发现内存泄漏,这两天看了一下里面有写了一个简单的内存管理模块,发现挺精巧,可以有效检测内存泄漏 原理很简单,就是把C的malloc函数分配的 ...

  5. PHP扩展-生命周期和内存管理

    1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...

  6. Linux内核笔记——内存管理之slab分配器

    内核版本:linux-2.6.11 内存区和内存对象 伙伴系统是linux用于满足对不同大小块内存分配和释放请求的解决方案,它为slab分配器提供页框分配请求的实现. 如果我们需要请求具有连续物理地址 ...

  7. Python深入06 Python的内存管理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...

  8. iOS经典面试题总结--内存管理

    iOS经典面试题总结--内存管理 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被 ...

  9. DPDK内存管理(1)

    1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口.下图展示了DPDK中内存有关的模块的相互关系. rte_eal            是统一 ...

随机推荐

  1. Spring Boot--01错误处理

    package com.smartmap.sample.ch1.controller.view; import java.io.IOException; import java.util.Collec ...

  2. ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”

    这种方式可以提高出图速度于效果,算法见http://blog.newnaw.com/?p=633,我用ArcGIS for JavaScript API来实现.具体代码为: function init ...

  3. Eclipse 配置 maven 的两个 settings 文件

    eclipse配置的settings文件名完全可以自定义,而本机maven只认识settings.xml文件. eclipse里配置maven有一个叫全局的,有一个叫用户的.这两个文件可以和本机mav ...

  4. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. 借助System.Linq.Dynamic, IQueryable根据排序字符串排序

    在使用Entity Framework时,若有多个排序,需要OrderBy (OrderByDescending)再ThenBy (ThenByDescending) 假设需要根据Name升序排序,再 ...

  6. How To Change Log Rate Limiting In Linux

    By default in Linux there are a few different mechanisms in place that may rate limit logging. These ...

  7. 用block将UIAlertView与UIActionSheet统一起来

    用block将UIAlertView与UIActionSheet统一起来 效果 1. 将代理方法的实例对象方法转换成了类方法使用 2. 要注意单例block不要长期持有,用完就释放掉 源码 https ...

  8. Ubuntu Linux 14.04 LTS 上安装php7+mysql+nginx

    输入 $ sudo apt-get install -y language-pack-en-base$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:o ...

  9. (z转)基于CPU的Bank BRDF经验模型,实现各向异性光照效果!

    摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文 名“GPU编程与CG语言之阳春白雪下里巴人” BRDF 光照模型 10.2.1 什么 ...

  10. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...