变量

python基础03——垃圾回收机制

微笑、不失礼 提交于 2020-03-05 18:18:09
垃圾回收机制(面试常见题) 存在意义:​ 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉 什么样的变量值是没有用的呢? 变量值需要绑定直接引用or间接引用,当变量值不再绑定任何引用时,则无法访问该变量值,此变量值就是没有用的,应当被回收 什么是垃圾回收机制? 垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间 为什么要用垃圾回收机制? 程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。 垃圾回收机制原理分析 Python的GC模块主要运用了 “引用计数” (reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过 “标记-清除” (mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过 “分代回收” (generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。 什么是引用计数? 引用计数就是:变量值被变量名关联的次数

python——变量的高级使用

本秂侑毒 提交于 2020-03-05 16:53:35
变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址 ,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用 变量 改为 对新赋值的数据引用 1.2 变量引用 的示例 在 Python 中,变量的名字类似于 便签纸 贴在 数据 上 定义一个整数变量 a ,并且赋值为 1 代码 图示 a = 1 | 将变量 a 赋值为 2 代码 图示 a = 2 | 定义一个整数变量 b ,并且将变量 a 的值赋值给 b 代码 图示 b = a | 变量 b 是第 2 个贴在数字 2 上的标签 1.3 函数的参数和返回值的传递 在 Python 中,函数的 实参 / 返回值 都是是靠 引用 来传递来的 def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result

新的一周无尽烧脑

元气小坏坏 提交于 2020-03-05 15:57:09
新的一周开始了 今天感觉头有点不够用一开始很多都不会,还好旁边兄弟靠谱。自己又复习下感觉吸收差不多! 描述垃圾回收机制 1,当某个变量引用计数变成0时就会被Python自动删除。从而解放占用的内存! 代码的描述 1,X 10 Y 10 Z10 在一起的时候由于多数的定义无意义占用内存时,就可一起定义为3. 变量数值和引用计数 当X = 变量数值 123 时 Y = X 再用 del X Z = 123 就是 X Y Z 都是 123 X Y Z = (变量名) 123 是变量数值 X Y Z 代表不同的容器但是,里面的饮料是不变的也就是123的变量数值。 当X=123 Y=X del X Z= 123 的时候就是 , X的容量为123 Y也是123 减去一个X 就是减去一个123 最后引用的数值为2 Python 小整数池概念 多个X Y Z 多个变量名都是 10的变量数值时,是占多个内存消耗过大。是无意义的还不如在一起定义为3的应用,减少内存。 我变强了也秃了,不我变聪明了头发掉光了!EMMMMM 来源: https://www.cnblogs.com/miaowugulu/p/10896437.html

【诡异并发三大恶人】原子性

余生颓废 提交于 2020-03-05 14:58:13
转:https://mp.weixin.qq.com/s/UiaXvnjc0NFfNMLf2lUq4A 前言、原子性的阐述 一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。 我理解是一个操作不可再分,即为 原子性 。而在并发编程的环境中,原子性的含义就是只要该线程开始执行这一系列操作,要么全部执行,要么全部未执行,不允许存在执行一半的情况。 我们试着从数据库事务和并发编程两个方面来进行对比: 1、在数据库中 原子性概念是这样子的:事务被当做一个不可分割的整体,包含在其中的操作要么全部执行,要么全部不执行。且事务在执行过程中如果发生错误,会被回滚到事务开始前的状态,就像这个事务没有执行一样。(也就是说:事务要么被执行,要么一个都没被执行) 2、在并发编程中 原子性概念是这样子的: 第一种理解:一个线程或进程在执行过程中,没有发生上下文切换。 上下文切换:指 CPU 从一个进程/线程切换到另外一个进程/线程(切换的前提就是获取 CPU 的使用权)。 第二种理解:我们把一个线程中的一个或多个操作(不可分割的整体),在 CPU 执行过程中不被中断的特性,称为原子性。(执行过程中,一旦发生中断,就会发生上下文切换) 从上文中对原子性的描述可以看出,并发编程和数据库两者之间的原子性概念有些相似: 都是强调,一个原子操作不能被打断! ! 而非原子操作用图片表示就是这样子的:

ES6语法简述

社会主义新天地 提交于 2020-03-05 13:33:29
JS高级-ES6 01-ECMAScript 6.0简介 ECMAScript 6.0,简称ES6,ES6的第一个版本是在2015年6月进行发布,所以我们把它称为《ECMAScript 2015 标准》(简称 ES2015) JavaScript是ECMAScript的一种实现,也就是说JavaScript是遵循ECMAScript标准的 现在主流浏览器已经可以完美使用ES6 02-let 和 const 概念 ES6新增了let和const来声明变量,来解决以前var声明变量所出现的问题 var存在的问题 var可以重复声明变量 var拥有变量提升 var不支持块级作用域 var不能用于定义常量 重复定义变量 案例演示 let name = '撩课学院' ; let name = '撩课' ; console . log ( name ) ; 注意 let和const都不支持在同一个作用域下重复定义变量 不存在变量提升 案例演示 console . log ( name ) ; let name = '撩课学院' ; 补充 在使用name变量时需要先定义才能进行使用 块级作用域 概念 1)在用var定义变量的时候,变量是通过闭包进行隔离的 2)现在用了let,不仅仅可以通过闭包隔离,还 增加了一些块级作用域隔离 if等大括号在ES6中都成为作用于 3

数据类型转换、运算符

霸气de小男生 提交于 2020-03-05 12:22:30
【数据类型转换、运算符】 内容 数据类型转换 算数运算符 比较运算符 逻辑运算符 三元运算符 第一章 数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 1.1 自动转换 一个int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型? int i = 1; byte b = 2; 运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。 自动转换 :将 取值范围小的类型 自动提升为 取值范围大的类型 。 1 public static void main(String[] args) { 2 int i = 1; 3 byte b = 2; 4 // byte x = b + i; // 报错 5 //int类型和byte类型运算,结果是int类型 6 int j = b + i; 7 System.out.println(j); 8 } 转换规则 范围小的类型向范围大的类型提升, byte 、short、char 运算时直接提升为 int 。 byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double 1.2 强制转换 强制类型转换 :将 取值范围大的类型 强制转换成 取值范围小的类型 。        比较而言

JavaScript的变量作用域

巧了我就是萌 提交于 2020-03-05 11:41:02
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的。 JavaScript没有块级作用域。 函数中声明的变量在整个函数中都有定义。 1、JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; function rainman(){ var man = 2; function inner(){ var innerVar = 4; alert(rain); } inner(); //调用inner函数 } rainman(); //调用rainman函数 </script> 观察alert(rain);这句代码。JavaScript首先在inner函数中查找是否定义了变量rain,如果定义了则使用inner函数中的rain变量;如果inner函数中没有定义rain变量,JavaScript则会继续在rainman函数中查找是否定义了rain变量,在这段代码中rainman函数体内没有定义rain变量,则JavaScript引擎会继续向上(全局对象)查找是否定义了rain;在全局对象中我们定义了rain = 1,因此最终结果会弹出'1'。 作用域链:JavaScript需要查询一个变量x时,首先会查找作用域链的第一个对象

JavaScript变量的作用域

痴心易碎 提交于 2020-03-05 11:34:07
虽然 《JavaScript权威指南》这本书很好,但是有一些东西让人容易理解错。最近在恶补基础,结合这本书,我想把变量的作用域重新梳理一下: "一个变量的作用域(scope)是程序源代码中定义这个变量的区域。 全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。然而在函数内声明的变量只在函数体内有定义。"----摘自《JavaScript权威指南》第6版 "在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称之为块级作用域。" ----摘自《JavaScript权威指南》第6版 在ECMAScript 6之前是没有块级作用域的,这里说的是 ECMAScript 5.1规范标准。 变量分全局变量,局部变量。这就决定了变量的作用域:全局作用域、与函数作用域 demo1: var scope = "global"; //声明一个全局变量 function check() { var scope = "local"; //声明一个同名的局部变量 return scope; //返回局部变量的值,而不是全局变量的值 } check(); => "local" 解: " 在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明的一个局部变量or函数参数中带有的变量和全局变量重名

3. 管道符 重定向 环境变量

久未见 提交于 2020-03-05 10:21:40
输出重定向 history > /root/aaa.txt:history在界面输出的信息,输入到aaa.txt,cat aaa.txt就能看到history命令显示的内容了,但是是覆盖 history >> /root/aaa.txt: 追加 管道符 ps -ef | grep ssh 把第一条命令的信息,给第二条命令来使用 通配符 ls /dev/sda* :查看所有以sda开头的 ls /dev/sda? :查看后面就跟某一个字符 ls /dev/sda[0-9]:查看匹配到0-9的单个数字 转义字符 反斜杠\:反斜杠后面的一个变量变为单纯的字符串:\$ 单引号'':转义其中所有的变量为单纯的字符串 双引号"":保留其中变量的属性,不进行转义 反引号``:把其中的命令执行后返回结果 环境变量 echo $PATH 配置文件在/etc/profile 编辑之后需要执行source /etc/profile来刷新下 来源: 51CTO 作者: clear3515 链接: https://blog.51cto.com/13884816/2474186

winform保存 变量那种方式好

旧城冷巷雨未停 提交于 2020-03-05 09:58:27
winform里有120*2个固定变量,一一对应,比如A1对应B3 ,A2对应B5,远程电脑发来A1,我需要处理B3;这些对应有时候还需要修改, 这些对应变量写死在程序中也可以,保存在数据库中也可以,保存在Text文本文件中也可以,保存在XML文件也可以, 请问那种方法好? 还有没更好的方 法。 当然是xml中了,你可以读取配置文件,然后随时更改对应的值 更好的方法就是,你可以通过延迟加载类,然后控制反转出需要对应的值,这样灵活性更好 xml配置文件中。可以灵活配置,无须重编译程序。 程序中2个参数(A,B),从配置文件中读取,A对应B,看你是全部要对应,还是单一输出,全部对应,就循环。 用Dictionary<string, string>把A机B机绑一起。 xml吧,几乎所有的应用程序都能处理XML文件。 xml,ini都行的 这种最佳应该是xml之类的配置文件。 既然要修改,肯定写死在程序是不行的 肯定XML啦!如果是数据库,万一你的软件要给很多人用,服务器的压力就得考虑考虑了。写死在程序里面,那肯定违反开闭原则了。 根本无所谓。 只要不是写在程序内部。 你写xml,写sqlite,写ini,都没有关系。 大家都是一个保存数据的文件而已。 区别只是,希望这个文件小一点,不要整一个 sql server过去。 首先 一定不要保存到程序内部.. 否则你改的话