详细讨论Python的数据模型和对象模型
数据模型==对象模型Python官方文档说它是“ Python数据模型”,大多数Python书作者说它是“ Python对象模型”,意思是“计算机编程语言中对象的属性”。
这句话有点抽象,只要您知道对象是Python的数据抽象,Python中的所有对象都是对象。
正式文件严格规定,Python程序中的所有数据均由对象或对象之间的关系表示。
对象的三个元素一个对象具有三个元素:标识,类型和值。
标识号是对象的内存地址,创建后将不会更改。
is运算符用于比较两个对象的数量。
id()函数返回对象号的整数表示。
身份也可以翻译为身份,对象身份。
类型确定可以对对象执行哪些操作,还定义对象的可能值。
例如,int和bool的值是不同的。
type()函数返回对象类型。
许多人错误地认为Python是一种弱类型的语言。
实际上,Python是一种强类型语言。
造成这种误解的真正原因是,不需要编译Python,也不需要事先知道变量的类型。
在运行时检查类型。
这应该称为动态语言。
。
JavaScript是一种弱类型语言。
在Python中,1 +“ 2”表示将无法运行,但可以在JavaScript中成功运行。
创建后,类型将不会更改。
尽管可以执行类型转换,但转换实际上会产生一个新对象:结果是:在值对象的三个元素中唯一可以更改的是值。
官方网站上有一个正确的废话:允许更改值的对象是可变的(可变的),而不允许更改值的对象是不可变的。
它的意义是当不可变对象的值是对可变对象的引用时,如何判断该对象的可变性?结论是不可变对象仍然是不可变的,因为不能更改此引用,但是我们通常认为该不可变对象的值是可变的,尤其是对象容器。
对象类型还确定它是否可变。
例如,数字,字符串和元组是不可变的,字典和列表是可变的。
对象容器一些对象包含对其他对象的引用,这些对象称为容器对象容器,例如元组,列表,字典。
在大多数情况下,当我们谈论容器的值时,我们谈论的是被引用对象的值,而不是引用号。
但是,在讨论容器可变性时,它仅是指直接包含在容器中的参考数字。
例如,元组是不可变的。
如果它包含对可变对象的引用,则当可变对象更改时,容器的值也将更改。
对象收集对象不会被明确销毁,但会将它们视为垃圾收集。
只要没有对象引用,这就是Python垃圾回收机制!垃圾回收机制更加复杂,例如循环引用(实际上不再使用了循环引用),但仍然存在涉及算法规则的引用。
在完成了Python的高级编写之后,我们将在编写Python原理时做进一步的研究。
Python垃圾回收机制不是灵丹妙药,不能解决所有问题。
因此,在引用外部资源(例如打开文件)之后,我们需要注意显式关闭,以防止资源始终占用内存并且无法释放,从而导致内存泄漏。
除了手动调用close()方法外,还可以使用with来自动关闭。
使用try ... .except可能会使对象继续存在。
类型决定了所有对象的类型,几乎决定了对象的所有行为,甚至是对象编号。
例如,对于不可变类型:a = 1b = 1a和b可以指向值为1的同一对象,或者它们可以指向两个不同的对象。
根据具体实现,其值为1的对象。
但是对于变量类型:c = [] d = [] c和d必须指向两个不同的单独的空列表。
请注意,c = d = []将相同的对象分配给c和d。
简介Python数据模型通常称为对象模型。
一切都是对象,具有三个元素:数字,类型和值。
了解对象模型后,Python的另一个重要概念即将出现,即数据结构。
负责编辑AJX