Python入门非常的简单, 语法相当清晰, 可读性非常好, 编程效率高等优点.
虽然入门很简单, 但是如果要深入Python这门语言, 我们还需要准确理解Python中的各种内在机制. 否则后面越学越艰难.
今天, 要讲的内容很关键, 特别是对于初学者来说:
理解Python中对象, 变量, 赋值, 绑定, 复制的本质.
什么是对象?什么是可变对象与不可变对象?
Python中的一切皆对象!
在Python中, 对象是一个内存实体, 对象分为可变对象和不可变对象, 其中不可变对象指的是对象一旦被创建, 其内存空间是不可以改变的, 也就是内容不可更改, 例如数字和字符串都是不可变对象, 元组也是不可变对象, 一经创建就不可修改.
可变对象指的是对象被创建之后, 其内存空间可以伸缩,内存中的内容可以被修改, 内存中的元素可以是多种类型. 对象中的元素既可以是可变对象, 也可以是不可变对象, 还可以是变量.
什么是变量?什么是对象的引用?什么是绑定?什么是重绑定?
Python中的变量,就是对象的引用,从词性来讲都是名词,也就是说其性质跟对象差不多,只不过变量存储的内容是被引用对象的内存地址.
绑定(binding)和重绑定(rebinding),从词性来讲都是动词,即一种操作.
绑定:顾名思义,就是将变量与对象绑定在一起,方便后期对对象的操作.
重绑定:就是与原来的对象解绑,并将该变量重新与其他的对象绑定在一起.
什么是引用计数?什么是自动垃圾回收?
通过上面的讲解,我们知道Python中的变量就是绑定到某一个对象的对象引用,这里我们不要纠结于对象引用的字面意思,其实就是引用对象的意思。因为变量是名词,所以与之对应的就是对象引用.
讲完了对象引用,那什么是引用计数呢?其实啊,引用计数就是有一个专门程序用来统计对象被对少个变量引用了,说白了就是一个对象被多少个变量绑定了,比如说对象A与变量b和变量c都进行了绑定,那么该对象的引用计数就是2,如果变量b及变量c先后与对象A解绑,那么引用计数就分别是1和0,注意:当引用计数为0时,就会触发垃圾回收程序,将对象A当作无用的垃圾从内存中删除掉,释其占用的内存.
什么是浅拷贝?什么是深拷贝?
浅拷贝的本质其实就是绑定操作,多个变量绑定到同一个对象,则其中的任何一个变量都可以操作该对象. 因此其内容可以被任何绑定它的变量所改变. 浅拷贝操作符是"=".
深拷贝需要调用专有的copy()函数来实现创建一个对象的副本。而不是像浅拷贝那样吧变量绑定到对象上.