python学习之内存机制

不可变对象(字符串、元组)

1. a = 1

首先在内存中创建对象1,并记录对象的引用计数为1次。

id(a) 查看变量a引用的对象的内存地址

2. b = 1

内存中已存在对象1,变量b引用对象1,则对象1的引用计数为2次。

id(b) 变量b和变量a引用的是同一个对象,内存地址相同。

3. a = a + 1

在内存中创建对象2,变量a不再引用原有对象1(引用次数减为1),开始引用对象2(引用次数增为1)

a = 1 重新执行a=1,a依然指向原有对象(因为还是1)

注意:仅对短字符有效,长字符串每次new对象,即便相同,也会重新建立内存;
这里目前没有查到相关资料,但确实如此。

可变对象(数组、字典、集合)

1. a = []

在内存中创建数组对象,记录对象引用次数为1次(被a引用)

2. b = []

在内存中重新创建新对象,记录对象引用次数为1次(被b引用),a和b所在内存地址不相同

3. a.append(1)

a依然指向原有的内存地址,因为是可变对象,所以不需要在内存中重建新对象

4. a = []

重新在内存创建可变对象[],a不再指向原有对象(引用次数变为0,被回收)

原文地址:https://www.cnblogs.com/jiukun/p/9325468.html

时间: 2024-11-08 22:40:43

python学习之内存机制的相关文章

python变量的内存机制

python变量的内存机制 作为一门简单易用的语言,且配备海量的库,python可谓是程序员手中的掌中宝,编程本身就是一种将人类思维转化为计算机思维的技术,如果不需要去追求极致的运行效率同时又不限制于计算机内存空间,python无疑是目前最方便的语言了. 作为一个合格的程序员,自然是要知其然并知其所以然,除了能够应用python来放飞自我之外,同时也要探究python其内部的运行原理,首当其冲的python编程中必须要用到的变量以及背后的运行机制. 注:以下示例在linux平台下编写,使用pyt

python中的内存机制

首先要明白对象和引用的概念 (例子:a=1, a为引用,1为对象,对象1的引用计数器为1,b=1此时内存中只有一个对象1,a,b都为引用,对象的引用计数器此时为2,因为有两个引用) a=1,b=1 id(a)=id(b) #短的字符串,数字python在内存中是一个对象 a=[],b=[] id(a)!=id(b) #字典,数组这样的对象在内存中python会new两个不同的对象 a="new a string" b="new a string" #长的字符串pyt

Python学习【反射机制】

反射机制 反射机制的本质是以字符串形式在对象或模块中进行添加,查找,删除,获取成员等操作,是一种基于字符串的一系列事件驱动. 相关内置函数 getattr(object, name[, default]) 获取object对象中的name属性并返回其值,在name不存在时返回default,不设置则会抛出一个AttributeError. setattr(object, name, value) 设置object对象中name属性的值为value,name不存在时则创建属性并赋值. hasatt

Python学习之路——day01

一.Python介绍 1.Python的诞生 Python的作者叫Guido Van Rossum(吉多 范 罗苏姆),是在1989年圣诞节的时候老婆孩子不在家,他为了打发时候写的一个程序,作为ABC语言的一种继承,太牛奔了! 2.和其他语言的比较 Python属于高级语言,和C#.Java一样,编译的顺序都是从代码==>内存==>解释器编译成字节码==>机器码,所以速度上会比C语言差一些,因为C语言是直接将代码编译成机器码的. 3.自己对Python的理解 Python用途很广泛,现在

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,

Python学习的个人笔记(基础语法)

Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅,一开始保存在word上,代码不是很好看,于是决定复制到博客里面,可能有复制过程中出错的,或者我本身在理解方面有出错的地方,希望能得到指正,谢谢  后续的内容我会继续学习…… python下载地址  www.python.org Python 分为2.7和3.3两个版本,3.3有些库不兼容,因此用2.

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

python学习的部分笔记

Python学习:终于开始了啊 Date: 2014.10.30 Python 第八章 if  expression : expr_true_suite 由三部分组成,关键字+表达式+表达式为真或非零时的代码块,注意要有冒号,后面语句需要进行缩进. 单个if语句可以通过布尔操作符 and , or, not实现多重条件判断或者是否定判断. 在if中,0 以及none,””等都是false类型. 如果一个复合语句(例如 if 子句, while 或 for 循环)的代码仅仅包含一行代码,那么它可以

Python学习—面向对象学习下

面向对象下 1.构造方法与析构方法 class People(object): # 构造方法:__init__(),在实例化对象时自动执行的方法 def __init__(self, name, age): self.name = name self.age = age print("创建对象成功.......") # 析构函数:__del__(), 当你删除对象时,自动调用的方法 # 删除对象:del 对象名 def __del__(self): print("删除对象成功