vs做的网站如何,做微信商城设计网站,网站宣传虚假处罚标准,电商设计一般都是做什么一、前言
大多数编译型语言#xff0c;变量在使用前必须先声明#xff0c;其中C语言更加苛刻#xff1a;变量声明必须位于代码块最开始#xff0c;且在任何其他语句之前。其他语言#xff0c;想C和java,允许“随时随地”声明变量#xff0c;比如#xff0c;变量声明可以…一、前言
大多数编译型语言变量在使用前必须先声明其中C语言更加苛刻变量声明必须位于代码块最开始且在任何其他语句之前。其他语言想C和java,允许“随时随地”声明变量比如变量声明可以在代码块的中间不过仍然必须在变量被使用前声明变量的名字和类型。
在Python中无序此类显式变量声明语句变量在第一次被赋值时自动声明。和其他大多数语言一样变量只有被创建和赋值后才能被使用。
# 变量未声明x
Traceback (most recent call last):
File , line 1, in
NameError: name x is not defined
#变量一旦被赋值就可以通过变量名来访问它x1yIts wonderful.x
1y
Its wonderful.
二、动态类型
Python中不但变量名无需事先声明而且也无需类型声明。在Python语言中对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码Python仍然是一种解释型语言。在赋值时解释器会根据语法和右侧的操作数来决定新对象的类型。在对象创建后一个该对象的应用会被赋值给左侧的变量。
三、内存分配
作为一个负责任的程序员我们知道在为变量分配内存时是在借用系统资源在用完之后应该释放借用的系统资源。Python解释器承担了内存管理的复杂任务这大大简化了应用程序的编写。
3.1 引用计数
要保持追踪内存中的对象Python使用了引用计数这一简单技术。也就是说Python内部记录着所有使用中的对象 各有多少引用。一个内部跟踪变量称为引用计数器。每个对象各有多少个引用简称引用计数。当对象被创建时就创建了一个引用计数当这个对象不再需要时也就是说这个对象的引用计数变为0时它被垃圾回收。并不是100%这样
3.2 增加引用计数
当对象被创建并赋值给变量时该对象的引用计数就被设置为1。
当同一个变量又被赋值给其他变量时或作为参数传递给函数、方法或类实例或者被赋值为一个窗口对象的成员时该对象的一个新的引用或者称为别名就被创建则该对象的引用计数就自动加1。
如下代码x 3y x语句x3我们将3赋值给x。x是第一个引用因此该对象的引用计数被设置为1。语句yx创建了一个指向同一对象的别名y。事实上并没有为y创建一个新的对象而是该对象的引用计数增加了一次变成了2。这是对象引用计数增加的方式之一。还有一些其他的方式也能增加对象的引用计数比如该对象作为参数被函数调用或这个对象被加入到某个列表等对象当中。
总之对象的引用计数增加是
对象被创建 x 3
另外的别名被创建 y x
作为参数传递给函数 foo(x)
成为容器对象的一部分 mylist [1,2,x,xyz]
3.3 减少引用计数
当对象的引用被销毁时引用计数会减小。最明显的例子就是当引用离开其作用范围时这种情况最经常出现在函数运行结束时所有的局部变量都被自动销毁对象的引用计数也就随之减少。
当变量被赋值给另外一个对象时原对象的引用计数也会自动减1:foo xyzbar foofoo 123
当字符串对象“xyz”被创建并赋值给foo时它的引用计数是1。当增加一个别名bar时引用计数变成了2。不过当foo被重新赋值给整型对象123时xyz对象的引用计数自动减1又重新变成了1。
其他造成对象引用计数减少的方式包括使用del语句删除一个变量或者当一个对象被移出一个窗口对象时。
对象引用计数减少的情况
一个本地引用离开了其作用的范围。比如foo() 函数结束时。
对象别名被显式销毁 del y
对象的一个别名被赋值给其他对象 x 123
对象被从一个窗口对象中移除 mylist.remove(x)
窗口对象本身被销毁 del mylist
四、垃圾收集
不再使用的内存会被一种称为垃圾收集的机制释放。像上面说的虽然解释器跟踪对象的引用计数但垃圾收集器负责释放内存。垃圾收集器是一块独立代码它用来寻找计数为0的对象。它也负责检查那些虽然引用计数大于0但也应该被销毁的对象。特定情形会导致循环引用。
以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持我们。
本文标题: python内存动态分配过程详解
本文地址: http://www.cppcns.com/jiaoben/python/265415.html