1、 变量的定义
(1) python变量使用前无须声明(Java/C等语言使用变量前必须先声明)
(2) 变量的类型无须显示声明(解释型语言在给变量赋值时,自动确认类型和内存占用情况)
2、内存管理
在为变量分配内存时,其实是在借用系统资源,因此在用完之后应该释放借用的系统资源。Python 解释器承担了内存管理的复杂任务,减轻了程序员的对内存操作的压力。
为了保持追踪内存中对象,Python 引入了 引用计数 这一技术。简单地说,当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 这个对象的引用计数变为 0 时, 它被垃圾回收。
引用增加:
(1)对象被创建 如:x = 3.14
(2)或另外的别名被创建 如: y = x
(3) 或被作为参数传递给函数(新的本地引用) 如: foobar(x)
(4) 或成为容器对象的一个元素 如: myList = [123, x, 'xyz']
引用减少:
(1)一个本地引用离开了其作用范围。比如 foobar()(参见上一下例子)函数结束时。
(2) 对象的别名被显式的销毁。 如: del y # or del x
(3) 对象的一个别名被赋值给其它的对象 如:x = 123
(4)对象被从一个窗口对象中移除 如:myList.remove(x)
(5)窗口对象本身被销毁 如:del myList # or goes out-of-scope
3、垃圾收集
不再被使用的内存会被一种称为垃圾收集的机制释放。象上面说的, 虽然解释器跟踪对象的引用计数, 但垃圾收集器负责释放内存。
垃圾收集器是一块独立代码, 它用来寻找引用计数为 0 的对象。它也负责检查那些虽然引用计数大于 0 但也应该被销毁的对象。
特定情形会导致循环引用
一个循环引用发生在当你有至少两个对象互相引用时, 也就是说所有的引用都消失时, 这些引用仍然存在, 这说明只靠引用计数是不够的。
Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。 当一个对象的引用计数变为 0,解释器会暂停,释放掉这个对象和仅有这个对象可访问(可到达)的其它对象。
作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。
来源:https://www.cnblogs.com/sjlin/p/7246960.html