python内存管理变量无需事先声明_Python内存管理说明

#coding=utf8

'''

变量和内存管理细节:

1、变量无须事先声明

2、变量无须指定类型

3、程序员不用关心内存管理

4、变量名会被"回收"

5、del语句能够直接释放资源

'''

from audioop import add

'''

Python中无需显示声明变量,变量在第一次被赋值时自动声明。

变量只有被创建和赋值后才能被使用。

'''

#print var #变量var没有定义

var=45

#变量一旦被赋值,就可以通过变量名来访问它

print var

'''

Python中不但变量名无需实现声明。

对象的类型和内存占用都是运行时确定的。

Python解释承担了内存管理的复杂任务。

'''

'''

Python使用引用计数来保持追踪内存中的对象。

Python内部记录着所有使用中的对象有多少引用。

一个内部跟踪变量,称为一个引用计数器。

每个对象拥有引用的个数,称为引用计数。

当对象被创建时,就创建了一个引用计数,当对象不在需要时,引用计数为0,就会被垃圾回收。

'''

'''

当对象被创建并赋值给变量时,该对象的引用计数就被设置为1。

当同一个对象的引用又被赋值给其它变量时,

或作为参数传递给函数、方法或实例时,

或者被赋值为一个窗口对象的成员时,

该对象的一个新的引用,或者称作别名,

就被创建(则该对象的引用计数自动加1)。

'''

Float=3.14 #创建一个浮点对象并将其引用赋值

Some=Float #创建一个指向同一对象的别名Some。Float对象的引用计数加1。

add(Float,Float) #作为参数传递给函数(新的本地引用),引用计数加1。

List=[123,Float] #称为容器对象的一个元素,引用计数加1。

'''

当对象的引用被销毁时,引用计数会减小。

当引用离开其作用范围时,所有的局部变量都被自动销毁,对象的引用计数页随之减少。

'''

def add(x,y): #局部变量x,y,当离开函数时,x,y被自动销毁

return x+y

'''

当变量被赋值给另外一个对象时,原对象的引用计数会自动减1。

'''

foo='xyz' #创建一个字符串对象并将其引用赋值

bar=foo #创建一个指向同一对象的别名bar。引用计数加1。

foo=123 #把整数对象赋值给变量,字符串引用计数减1。

'''

使用del删除一个变量,也会造成对象引用计数减少;

当一个对象被移出一个窗口对象时,也会造成对象引用计数减少;

'''

del Some #对象的别名被显示销毁

List.remove(Float) #对象被从一个窗口中移除

del List #窗口对象本身被销毁

'''

del语句会删除对象的一个引用,语法格式如下:

del obj1[,obj2[,... objN]]

执行一个del语句会产生两个结果:

从现在的命名空间中删除obj、对象的引用计数减1

'''

'''

执行del语句会删除对象的最后一个引用,

也就是对象的引用计数减为0,

这会导致该对象从此“无法访问”或“无法抵达”。

该对象就成为垃圾回收机制的回收对象。

任何追踪或调试程序会给一个对象增加一个额外的引用,

这会推迟该对象被回收的时间。

'''

'''

不再被使用的内存会被一种称为垃圾收集的机制释放。

垃圾收集器是一块独立的代码,它用来寻址引用计数为0的对象。

它也负责检查虽然引用计数大于0但也应该被销毁的对象。

'''

'''

Python的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。

用来防止循环引用的产生。

'''

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值