Python可变与不可变类型及垃圾回收机制
1. 可变与不可变类型
1.1 可变类型
在id不变的情况下,value可以改变,则称之为可变类型。列表、字典与集合是可变的。
l1 = [,,,,]
print(id(l1))
l1[] = #改变列表元素
print(id(l1))
result:
#id不变 info = {'name':'言念君子'}
print(id(info))
info['name']='温润如玉'
print(id(info))
result: s1 = {'a','b','c','d'}
print(id(s1))
s1.add('zxj')
print(id(s1))
result:
1.2 不可变类型
value一旦改变,id也改变(id改变意味着创建了新的内存)。整数、浮点数、字符串、元组是不可变类型。
l1 = ['a','c']
tu = (,,,l1)
print(tu , id(tu))
l1[]='zxj'
print(tu,id(tu))
result:
(, , , ['a', 'c'])
(, , , ['a', 'zxj'])
2. 引用计数
引用计数即对一个变量值的引用次数,如:
a = 10
b = 10
变量10被引用了2次。
3. 垃圾回收机制
定义变量并不会占用内存,只有在运行变量类型的时候才占用内存,运行完毕后需要释放内存,解除占用。Python存在一种机制会回收这种占用的内存,即垃圾回收机制。垃圾回收机制在一下两种情况下会回收内存:
1>程序执行完毕后id被回收;
2>引用计数为0后id被回收。
Python可变与不可变类型及垃圾回收机制的更多相关文章
- 三、python对字符串和集合的内存垃圾回收机制
变量声明: name1 = "andy" name2 = name1 这个时候我把name1的值给改成了“tom”,问现在name2的值是什么?为什么? 答:andy,因为你把 ...
- 编程语言分类,Python代码执行,应用程序使用文件的三步骤,变量,常量,垃圾回收机制
编程语言分为 机器语言(直接用二进制01跟计算机直接沟通交流,直接操作硬件) 优点:计算机能够直接读懂,速度快 缺点:开发效率极低 汇编语言(用简单的英文标签来表示二进制数,直接操作硬件) 优点:开发 ...
- python 全局变量与局部变量 垃圾回收机制
掌握L.E.G.B(作用域) 掌握局部作用域修改全局变量 步骤- 1.命名空间和作用域 命名空间:变量名称与值的映射关系作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分 ...
- Python的 垃圾回收机制
垃圾回收 1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 257) 这些整 ...
- python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制
目录 字典的内置方法 类型转换 字典取值 修改值 计算字典长度 成员运算 删除元素 获取元素 更新字典 快速生成字典 setdefault()方法 元组的内置方法 类型转换 索引与切片操作 统计长度 ...
- Python垃圾回收机制 总结
Python 垃圾回收机制 内存管理 Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,往上的三层才是由Python实现并且维护的,第一层则是在第0层 ...
- 【Python】 垃圾回收机制和gc模块
垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- python垃圾回收机制(转)
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...
随机推荐
- [已读]JavaScript DOM编程艺术
看到过很多人将它作为推荐入门书籍,当时我刚看完ppk和javascript精粹,于是看到这本就觉得很一般了.怎么说,它适合基础.
- CPU占用分析
用TOP命令很容易定位到时谁占用CPU最高 多线程的进程,我们要知道实际上占用cpu的最小单位是线程,所以肯定是众线程中的某一个或几个占用CPU过高导致的.top -H -p pid命令查看进程内各个 ...
- vue中的number
今天在vue文档中看到有number这样一个修饰符 觉得挺方便的就尝试了一下下面是代码 <body> <div id="box"> <input ty ...
- SVN中如何去除版本控制器
SVN,大家都熟悉,做项目都知道,不知道你有没有遇到每次提交的代码的时候,都会把bin和obj自动生成的文件夹提交SVN服务器上 其实这里都不需要提交,每次生成都提交,可能还会容易冲突,如何不让bin ...
- js将数字转换为带有单位的中文表示
好不容易找到了, 实测可行, 记录一下. 到时候调用方法 addChineseUnit , 其他两个方法在addChineseUnit中有调用 /** * 为数字加上单位:万或亿 * * 例如 ...
- let和const注意点
let 一.块级作用域 下面的代码如果使用var,最后输出的是10. var a = []; for (var i = 0; i < 10; i++) { a[i] = function () ...
- iOS操作系统的层次结构
iOS操作系统4层结构,如下表 可触摸层 Cocoa Touch layer 媒体层 Media layer 核心服务层 Core Services layer 核心操作系统层 Core OS lay ...
- 【extjs6学习笔记】0.1 准备:基础概念 (01)
1. Ext.application 应用程序入口点 2. Ext.onReady() 页面加载完成后触发动作 3. Ext.define() 4. Ext.data.proxy.Proxy 5. E ...
- 项目经验——jboss 配置数据库连接池
数据库的连接和关闭是非常消耗系统资源的,在多层结构的应用环境中,这种资源消耗又直接的反映到系统性能上来.在项目实际应用中,最常用的解决方案便是建立数据库连接池. 一.数据库连接池基本原理 当程序启动时 ...
- 第14周翻译:SQL Server的阶梯安全级别2
SQL Server的阶梯安全级别2:身份验证 源自:http://www.sqlservercentral.com/articles/Stairway+Series/109975/ 作者:Don K ...