一、命名空间、作用域、LEGB法则、

1.命名空间和作用域 :

  命名空间:变量名称与值的映射关系

  作用域:变量作用的区域,即范围。

  注意:class/def/模块会产生作用域;分支语句,循环语句,异常处理语句不会产生新的作用域。

2.作用域的类型区分:

命名空间:变量名称与值的映射关系

作用域:变量作用的区域,范围。

作用域分类型:

  局部作用域:Local 简称 L

  嵌套作用域:Enclosing 简称 E

  全局作用域: Global 简称 G

  内置作用域:Builtin 简称 B

  

3、LEGB法则:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域

    

4.局部作用域变量的特点:

  局部变量只能在局部访问

  函数运行,开辟栈帧,在函数栈帧存活期间,访问局部变量,可以访问得到,如果函数栈帧销毁,则所有数据对象销毁。

5.局部作用域内修改全局变量:

  需要在局部作用域内生成全局变量

    

当在局部作用域内修改全局变量时,如果全局变量为不可变类型,需要使用global 生命全局变量,才可以修改;如果全局变量为可变类型,可以直接修改。

6.总结:

  命名空间与作用域

  作用域类型:LEGB

  LEGB法则

  局部作用域内修改全局变量

  可变类型:直接修改

  不可变量:global

  在局部修改全局的:global

  在局部修改嵌套的:nonlocal

二、垃圾回收机制

1.基础概念理解:

  内存空间的申请与回收是非常耗费精力的事情,且存在极大的危险性,稍有不慎就有可能引发内存溢出问题,好在 Cpython 解释器提供了自动的垃圾回收机制来帮我们解决了这件事。 Python 的垃圾回收机制 ( 简称GC ) 主要采用的是引用计数为主、标记清除与分代回收为辅的垃圾回收策略

2.引用计数:

  值被多次引用:不会在内存中重复创建数据,而是引用计数器+1,当对象被销毁时,引用计数器-1,如果引用计数器为0,在内存中进行删除销毁(暂时不考虑其他特殊的情况)。

例:

      

        

        

3.标记清除:

  为了解决循环引用的问题,我们引入了标记清除,只针对那些可能才在循环引用的对象,进行特殊处理,例如:列表、元组、字典、集合。

  当这些类型中引入另外一个,并且只有他们互相引用,那么就给标记清除。

          

4.分代回收:

  对标记清除要进行优化,将那些可能存在循环引用的对象拆分,拆分为3个不同的区域,称为:0/1/2(青年代、中年代、老年代),

  0:当区域内对象个数阈值达到700时,才执行一个0代的扫描检查。

  1:当0代(青年代)扫描次数超过10次,则执行一个1代扫描检查。

  2:当1代(中年代)稻苗次数超过10次后,则执行一次2代的扫价差。

5.总结:

  垃圾回收机制(GC机制)

  以引用计数为主,标记清除和分代回收为辅

 

命名空间、作用域、LEGB法则、垃圾回收机制的更多相关文章

  1. JavaScript作用域链和垃圾回收机制

    作用域链 基本概念: 在了解作用域链和内存之前,我们先了解两个概念,分别是执行环境和变量对象. 执行环境:定义变量或者函数有权访问的其他数据,决定了它们各自的行为.每个对象都有自己的执行环境. 变量对 ...

  2. JavaScript 执行环境、作用域、内存管理及垃圾回收机制

    前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔( ...

  3. JavaScript--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...

  4. JS--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...

  5. Python-变量、变量作用域、垃圾回收机制原理-global nonlocal

    变量实现原理决定了Python使用的垃圾回收机制为变量引用计数,当这个对象引用计数为0时候,则会自动执行__del__函数回收资源, del方法只是把变量指向的对象引用计数减一而已并删除这个变量 表达 ...

  6. python 全局变量与局部变量 垃圾回收机制

    掌握L.E.G.B(作用域) 掌握局部作用域修改全局变量 步骤- 1.命名空间和作用域 命名空间:变量名称与值的映射关系作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分 ...

  7. 【转】【C#】C# 垃圾回收机制

    摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...

  8. asp.net 之 GC (垃圾回收机制)

    今天抽时间好好整理了下GC相关知识,看了CSDN和博客园的几篇文章,有了一定的简单了解,决定根据个人理解整合一份随笔写下来,望诸位指教. 一:基础问题 1.首先需要知道了解什么是GC? GC如其名,就 ...

  9. .NET垃圾回收机制 转

    在.NET Framework中,内存中的资源(即所有二进制信息的集合)分为"托管资源"和"非托管资源".托管资源必须接受.NET Framework的CLR( ...

随机推荐

  1. Kubernetes的安装部署

    前言:简述kubernetes(k8s)集群 k8s集群基本功能组件由master和node组成. master节点上主要有kube-apiserver.kube-scheduler.kube-con ...

  2. eBPF 安全项目 Tracee 初探

    1. Tracee 介绍 1.1 Tracee 介绍 Tracee 是一个用 于 Linux 的运行时安全和取证工具.它使用 Linux eBPF 技术在运行时跟踪系统和应用程序,并分析收集的事件以检 ...

  3. Mysql常用sql语句(6)- limit 限制查询结果的条数

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 实际工作中,我们的数据表数据肯定都是万级别的,如 ...

  4. 事务保存点savepoint

    一.

  5. liquibase新增字段注释导致表格注释同时变更bug记录

    liquibase是一个用于数据库变更跟踪.版本管理和自动部署的开源工具.它的使用方式方法可以参考官方文档或者其他人的博客,这里不做过多介绍. 1. 问题复现 在使用过程中发现了一个版本bug.这个b ...

  6. ysoserial CommonsColletions1分析

    JAVA安全审计 ysoserial CommonsColletions1分析 前言: 在ysoserial工具中,并没有使用TransformedMap的来触发ChainedTransformer链 ...

  7. DFS与DFS迷宫问题

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数n 和 ...

  8. swiper轮播高度不正常

    第一次进入页面可能是网速原因,图片加载问题等吧,导致轮播图高度很大,下面出现空白, 需要加入参数 autoHeight: true, observer: true, observeParents: t ...

  9. 《如何进行接口mock测试》

    前言: Mock通常是指:在测试一个对象时,我们构造一些假的对象来模拟与其交互.而这些Mock对象的行为是我们事先设定且符合预期.通过这些Mock对象来测试对象在正常逻辑,异常逻辑或压力情况下工作是否 ...

  10. Sql 小技巧(持续汇总)

    身份证号加密 select concat(left(`visitors`.`Card_id`,3),'****',right(`visitors`.`Card_id`,4)) AS `Card_id` ...