Python之垃圾回收机制与用户交互

Python之垃圾回收机制与用户交互

垃圾回收机制

垃圾回收机制(简称GC)是Python解释器自带一种机制,专门用来回收不可用的变量值所占用的内存空间

为什么要用垃圾回收机制?

程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。

垃圾回收机制原理分析

Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。

引用计数

引用计数就是:变量值被变量名关联的次数

如:age=18

变量值18被关联了一个变量名age,称之为引用计数为1

** 标记-清除**

标记/清除算法的做法是当应用程序可用的内存空间被耗尽的时,就会停止整个程序,然后进行两项工作,第一项则是标记,第二项则是清除

#1、标记
标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,应该被清除。

#2、清除
清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。

分代回收

背景

基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,这是非常消耗时间的,于是引入了分代回收来提高回收效率,分代回收采用的是用“空间换时间”的策略。

分代

分代回收的核心思想是:在历经多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,gc对其扫描的频率会降低

回收

回收依然是使用引用计数作为回收的依据

python与用户交互

print(‘*‘ * 50)
s = input(‘请输入你的身高:‘)  # 1. 让程序暂停  # 2. 接收的永远是字符串
print(s, type(s))  # s接收了用户输入的内容
print(int(s) + 1)
print(‘*‘ * 50)
# python2和python3中input的区别

# python2和python3多版本共存

# python.exe复制粘贴一份,然后重命名为python2.exe/python3.exe

# 更换python解释器

# file --> settings --> project --> project interpreter
# python2中input和raw_input的区别

#input()
#用户必须得知道python有哪些数据类型才能使用你这个程序,python2的input就被淘汰
print ‘*‘*50
s = input(‘please enter your name: ‘)  # 输入什么类型就是什么类型
print s,type(s)
print ‘*‘*50

# raw_input()
print ‘*‘ * 50
s = raw_input(‘please enter your name: ‘) # 和python3的input一模一样
print s, type(s)
print ‘*‘ * 50

格式化输出的三种方式

第一种(主流)

# f-string格式化
# f让{}变得有特殊意义,让{}内的普通字符变成了变量名
s1 = ‘nick ‘
s2 = ‘handsome‘
print(f‘{s1}{s2}‘) # nick handsome

第二种(了解)

# %占位符  python3.0 兴许还看得到

s1 = ‘nick‘
s2 = ‘handsome‘
print(‘%s %s‘%(s1,s2))

第三种(了解)

#format  python3.3  --> 一点毛用都么用

s1 = ‘nick‘
s2 = ‘handsome‘
print(‘{} {}‘.format(s1,s2)) # s1-->0 s2-->1

# print(‘{1} {1}‘.format(s1,s2)) # handsome handsome
# 仅作了解

x = 10
print(f‘{x:.5f}‘)  #保留小数个数

s = ‘nick‘
print(f‘{s:*<100}{s:^10}‘)  # ^表示居中 # <居左  # >居右

解压缩

解(解开)压缩(容器类数据类型)

lt=[1,2,3,4,5]
# print(lt[1],lt[2],lt[3])

s1,s2,s3,s4,s5=lt
print(s1,s2,s3,s4,s5)
# 下划线_ 代替不要的

# 单个下划线表示这个东西不需要(约定俗成)
lt=[1,2,3,4,5]
s1,_,_,_,_ = lt
print(s1) # 1
# print(_)  # 可以打印,但是不要去打印
# *_  代替好几个下划线_ 方便

# *_  *把后面的元素全部合成放到列表里去了
lt=[1,2,3,4,5]
s1,*_,s5 = lt
print(s1) # 1
# print(_) # [2,3,4]
# 10,20,30 = (10,20,30) = [10,20,30]
x, y, z = 10, 20, 30 #元组 #看成一个列表,用到了解压缩原理
# x, y, z = [10,20,30]
print(x, y, z)

原文地址:https://www.cnblogs.com/jzm1201/p/12590470.html

时间: 2024-07-29 09:08:33

Python之垃圾回收机制与用户交互的相关文章

详解python的垃圾回收机制

python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式,所以当一个变量值没有关联任何变量名时,我们就无法再访问到该变量值了,该变量值就是一个垃圾会被python解释的垃圾回收机制自动回收 二.什么是垃圾回收机制 垃圾回收机制(简称GC)是python解释器自带的一种机制,专门用来回收不可用的变量值所占用的内存空间 三.为什么要用垃圾回收机制 程序运行过

小猿圈python之垃圾回收机制

一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存泄漏:当程序不停运行,有一部分对象没有作用,但所占内存没有被释放,服务器内存随时间越来越少,最终导致系统的崩溃,所以内存泄漏是一个需要重点关注的问题. Java垃圾回收 半自动 只买新的 不用管扔垃圾 Python全自动 二.python的垃圾回收机制包括引用计数.循环引用,那么我们通过什么来解决呢

python的垃圾回收机制(GC)

Hello, 大家好, 又出来冒头了. 今天想跟大家分享的是关于python的垃圾回收机制,虽然本人这会对该机制没有很深入的了解, 但是本着热爱分享的原则,还是囫囵吞枣地坐下记录分享吧, 万一分享的过程中开窍了呢.哈哈哈. 首先还是做一下概述吧: 我们都知道, 在做python的语言编程中, 相较于java, c++, 我们似乎很少去考虑到去做垃圾回收,内存释放的工作, 其实是python内部已经做了相应的回收机制, 不用我们自己操心去做内存释放.但是还是有必要了解一下.可以更加深入的了解pyt

python的垃圾回收机制

进程空间 进程运行时需要在内核中占据一段内存空间,用以存储程序和数据. 每个进程空间分布如下所示: 进程空间的结构 text段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域.在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等. data段:数据段(data segment)通常用来存放程序中已初始化的全局变量数据段属于静态内存分配. bss段:bss(Block Started by Symbol) 通常用来存放程序中未初始化的

&lt;转&gt; python的垃圾回收机制

Python的GC模块主要运用了"引用计数"(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过"标记-清除"(mark and sweep)解决容器对象可能产生的循环引用的问题.通过"分代回收"(generation collection)以空间换取时间来进一步提高垃圾回收的效率. 引用计数机制: python里每一个东西都是对象,它们的核心就是一个结构体:PyObject 1 typedef struct_

python中垃圾回收机制和对象变量的指向问题,深拷贝

变量.对象和引用 一个变量也就是变量名,当代码第一次赋值时就创建了他,之后的赋值将改变已创建的变量名的值. 变量类型,变量中没有类型之说,类型存在于对象中,变量只是在一个特定的时间对对象的引用. 变量使用,变量出现在表达式中会立即被对象所替代,所有变量在使用前就应该对其明确赋值. 例如 a = 3 为例 python将执行3个步骤完成这个请求 1.创建一个对象来代表3 2.创建一个一个变量a,如果他还没创建的话, 3.将变量与新的对象相连接 变量-引用-对象 对象的垃圾回收机制 当变量名被赋予了

简单理解python的垃圾回收机制

关键词:垃圾回收.引用计数.分代回收.标记-清除 前言:理解python中变量的定义:抽象理解python中变量的定义过程 1.垃圾回收机制的基本组成: python采用的是以引用计数为主,以分代回收和标记清除为辅的垃圾回收机制 2.详细分析垃圾回收机制: (1)首先是引用计数: 在python中,每创建一个对象,那么python解释器会自动为其设置一个特殊的变量,这个变量称为引用计数(初始值默认是1).一旦有一个新变量指向这个对象,那么这个引用计数的值就会加1.如果引用计数的值为0.那么pyt

python基础-垃圾回收机制

垃圾回收 Python中的垃圾回收是以引用计数为主,分代收集为辅.引用计数的缺陷是循环引用的问题. 引用计数 原理:当一个对象的引用被创建或者复制时,对象的引用计数加1:当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉. 优点:引用计数有一个很大的优点,即实时性,任何内存,一旦没有指向它的引用,就会被立即回收,而其他的垃圾收集技术必须在某种特殊条件下才能进行无效内存的回收. 缺点:但是它也有弱点,引用计数机制所带来的维护

python的垃圾回收机制 继承的顺序C3算法

Python垃圾回收    -- 引用计数        -- Python为每个对象维护一个引用计数        -- 当引用计数为0的 代表这个对象为垃圾    -- 标记清除        -- 解决孤立的循环引用        -- 标记根节点和可达对象        -- 不可达视为垃圾    -- 分代回收        -- 解决标记清除的效率问题        -- 0代 1代 2代        -- 阈值 (700,10,10)        -- 当调用c的接口开辟内存和