1.变量、垃圾回收机制
作者:互联网
一.变量
1.什么是变量?
用于描述事物的变化状态;比如人的年龄、游戏的等级等等。
2.为什么要有变量
为了让计算机能够像人一样去记忆事物的某种状态,并且状态时可以发生变化的。
3.怎么使用变量
# 原则:先定义、后引用
定义变量:
变量 = 变量值
name = 'kevin' # 定义
print(name) # 引用
1.1 变量的定义规范
1. 变量名只能是 字母、数字或下划线的任意组合
2. 变量名的第一个字符不能是数字
3. 关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
1.2变量名的命名风格
# 风格一:驼峰体
AgeOfTony = 56
NumberOfStudents = 80
# 风格二:纯小写下划线(在python中,变量名的命名推荐使用该风格)
age_of_tony = 56
number_of_students = 80
1.3变量值的三大特性
#1、id
反应的是变量在内存中的唯一编号,内存地址不同id肯定不同
#2、type
变量值的类型
#3、value
变量值
1.4 is 与 ==
1.is比较的是id
2.==比较的是value
#强调:
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Egon:18'
>>> y='Info Egon:18'
>>> id(x)
4376607152
>>> id(y)
4376607408
>>>
>>> x == y
True
>>> x is y
False
#1、在交互式模式下
Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收
每创建一个-5到256之间的整数,都是直接从这个池里直接拿走一个值,例如
>>> y=4
>>> id(y)
4297641184
>>>
>>> x=3
>>> x+=1
>>> id(x)
4297641184
#在pycharm中
但在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究
二.垃圾回收机制
1 什么是垃圾回收机制
垃圾回收机制(简称GC)是Python解释器自带一种机制,专门用来回收不可用的变量值所占用的内存空间
2.为什么要用垃圾回收机制?
程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来
#########垃圾回收机制原理分析############
1.引用计数:变量值被变量名关联的次数;引用计数一旦变为0,其占用的内存地址就应该被解释器的垃圾回收机制回收
2.标记清除:
#1、标记
标记的过程其实就是,遍历栈区中的所有内容,将所有直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,应该被清除。
#2、清除
清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。
3.分代回收
#1、分代
分代回收的核心思想是:在历经多次扫描的情况下都没有被回收的变量,gc机制就会认为该变量是常用变量,gc对其扫描的频率会降低
#2、回收
回收依然是使用引用计数作为回收的依据
'''
内存中有两块区域:堆区与栈区,在定义变量时,变量名与值的内存地址的关联关系存放于栈区,变量值存放于堆区,内存管理回收的则是堆区的内容
引用计数增加:
x = 10 # 10的引用计数为1
y = x # 10的引用计数为2
z = x # 10的引用计数为3
在内存中开辟一个空间用来存储变量值10,然后绑定给x,10的引用计数就为1;然后把变量x绑定给y,引用计数就为2;最后把x绑定给z,引用计数就为3
引用计数减少:
del x #解除变量名x与值10的绑定关系,10的引用计数为2
del y #解除变量名y与值10的绑定关系,10的引用计数为1
z = 123 #把值123绑定给z,此时值10与z的绑定关系接触,10的引用计数为0
当值10的引用计数为0时,意味着10无法被访问到,也就无意义了,此时10就变为了垃圾。
'''
三.常量
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
举例,假如一个人的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_NAME = 56
标签:10,变量,回收,计数,引用,变量名,垃圾 来源: https://www.cnblogs.com/blog-tc/p/16541655.html