0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详谈Python的数据模型和对象模型

如意 来源:PythonMind 作者:dongfanger 2021-02-10 15:59 次阅读

数据模型==对象模型

Python官方文档说法是“Python数据模型”,大多数Python书籍作者说法是“Python对象模型”,它们是一个意思,表示“计算机编程语言中对象的属性”。这句话有点抽象,只要知道对象是Python对数据的抽象,在Python中万物皆对象就可以了。

官方文档严谨说法,Python程序中的所有数据都是用对象或对象之间的关系来表示的。

对象三要素

对象有三个要素:编号(identity)、类型(type)、值(value)。

identity

编号就是对象的内存地址,从创建后就不会改变。is运算符用来比较2个对象的编号。id()函数返回对象编号的整数表示。

identity也可以翻译为身份,对象身份。

type

类型决定了可以对对象做哪些操作,也定义了对象的可能值,比如int和bool类型的值就不一样。type()函数返回对象类型。很多人会误以为Python是弱类型语言,其实Python是强类型语言,这个误解的真实原因是,Python不需要编译,不需要提前知道变量的类型,在运行时才检查类型,这应该叫做动态语言。

JavaScript是弱类型语言,在Python中1+“2”会运行失败,在JavaScript中能运行成功。

类型在创建后也不会改变,虽然可以进行类型转换,但转换实际会产生新对象:

结果为:

详谈Python的数据模型和对象模型

value

对象三要素中唯一能改变的就只有值了。官网有一句正确的废话:允许改变值的对象是mutable(可变的),不允许改变值的对象是immutable(不可变的)。它的意义在于当不可变对象的值是对可变对象的引用时,该如何判断对象的可变性?结论是不可变对象仍然是不可变的,因为这个引用是不能变的,但是我们通常会认为这个不可变对象的值是可变的,尤其是对象容器。对象类型也会决定是否可变,比如numbers、strings、tuples是不可变的,dictionaries、lists是可变的。

对象容器

有些对象包含了对其他对象的引用,这叫做containers对象容器,比如tuples、lists、dictionaries。大多数情况下,我们说容器的值,说的是引用的对象的值,而不是引用编号。但讨论容器可变性时,则仅仅是指容器直接包含的引用编号。比如tuple是不可变的,如果它包含了对一个可变对象的引用后,当该可变对象改变时容器的值也会改变。

对象回收

对象不会被显式销毁,但是它们会被当做垃圾回收,只要不存在对象引用,这就是Python垃圾回收机制!垃圾回收机制比较复杂,比如循环引用,实际上已经没有使用了,但是还存在引用等,涉及到算法规则,等写完Python进阶,在写Python原理时做进一步研究。

Python垃圾回收机制不是银弹,不能解决所有问题,所以在引用外部资源,比如打开文件后,我们需要注意显式close,防止资源始终占用内存,无法释放,造成内存泄漏。close除了手动调用close()方法外,也可以使用with来自动close。

使用try.。.except可能会让对象继续存活。

类型决定一切

对象的类型几乎决定了对象的一切行为,甚至是对象编号,比如对于不可变类型:

a = 1

b = 1

a和b可能会指向同一个值为1的对象,也可能会指向两个不同的值为1的对象,这取决于具体实现。

但是对于可变类型:

c = []

d = []

c和d一定会指向两个不同的单独的空列表。

注意c = d = [] 则是将同一个对象赋值给 c 和 d。

小结

Python数据模型就是常说的对象模型,万物皆对象,有编号、类型、值三个要素。了解了对象模型后,Python另一个重要概念即将浮出水面,它就是数据结构。
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87599
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47685
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    基于面向对象数据模型的信息管理系统

    探讨了面向对象数据模型信息管理系统的结构设计和信息管理系统实现技术。系统设计采用面向对象数据模型数据库结构采用
    发表于 02-21 11:35 14次下载

    基于对象模型的通用网络考试平台的数据设计

    利用面向对象技术分析解决问题的优势,建立起通用网络考试平台系统的对象数据模型,然后采用特定的策略将该对象模型转变为关系
    发表于 08-15 09:14 6次下载

    基于MDA的面向对象时空数据模型研究

    本文以模型驱动架构(MDA)为理论基础,以事件驱动的方法构建面向对象时空数据模型,探索在关系数据库及对象关系型GIS平台下进行面向
    发表于 07-26 16:57 9次下载

    什么是层次数据模型数据流量分析

    什么是层次数据模型 用层次结构表示实体类型及实体间联系的数据模型称为层次数据模型(hierarchical datamodel)。层次结构是树结构,树的结点是记录类型,非根结点有且
    发表于 06-17 08:13 1448次阅读

    什么是ActiveDirectory数据模型、数字数据网络

    什么是ActiveDirectory数据模型 从 LDAP 数据模型演化而来的模型。该目录用来保存对象,这些对象代表了由属性描述的各种端口
    发表于 06-17 08:13 963次阅读

    数据模型概念及类型划分

      数据(data)是描述事物的符号记录。模型(Model)是现实世界的抽象。数据模型(Data Model)是数据特征的抽象,是数据库管理
    发表于 08-03 15:05 7885次阅读

    概率XML数据模型的综述

    首先介绍了概率XML数据管理技术的概念,特点和挑战;其次综述了概率XML数据和概率XML数据模型,各种模型的核心思想都来自于可能世界模型,通
    发表于 12-26 11:08 20次下载
    概率XML<b class='flag-5'>数据模型</b>的综述

    Google Dremel数据模型讲解

    首先简单介绍一下 Dremel 是什么,能解决什么问题。第二部分着重讲 Dremel 的数据模型,即数据结构。第三部分将谈一下在此数据结构上设计的算法。Dremel 的数据模型起源于分
    发表于 11-28 17:05 4008次阅读
    Google Dremel<b class='flag-5'>数据模型</b>讲解

    数据模型的概念和作用

    数据模型(DataModel)是现实世界数据特征的抽象,或者说是现实世界的数据模拟。数据库中,用数据模型来抽象地表示现实世界的
    的头像 发表于 02-28 15:55 1.5w次阅读

    数据模型的三要素

    本视频主要详细介绍了数据模型的三要素,分别是数据结构、数据操作和数据约束。
    的头像 发表于 02-28 15:57 2.1w次阅读

    数据模型有哪些种类

    数据库的类型是根据数据模型来划分的,而任何一个DBMS也是根据数据模型有针对性地设计出来的,这就意味着必须把数据库组织成符合DBMS规定的数据模型
    的头像 发表于 02-28 16:00 2.8w次阅读

    智能电网的数据模型标准

    数据模型标准可以在智能电网架构模型的信息层表示。将数据模型从通信协议和技术中解耦的概念,被越来越多地应用于电力系统相关的标准化工作中。通过引入的数据模型和通信服务之间的适配层[如IEC
    发表于 06-10 14:46 1173次阅读

    Modbus协议的数据模型和地址模型

    在使用Modbus协议的时候,经常会遇到诸如40001、30001,10001之类的地址,这些数字代表什么含义呢?这其实是Modbus协议的数据模型和地址模型
    发表于 04-07 09:28 2938次阅读

    Matter的数据模型和开发

    在第一篇内容中,我们介绍了智能家居互联标准 Matter会带来什么好处。本文,我们来了解一下Matter的数据模型和开发。
    的头像 发表于 12-01 10:18 1037次阅读

    CSON使用实例:定义数据模型

    ; char *user; struct project *cson;}; 定义数据模型: 对每一个需要使用cson的结构体,都需要定义相对应的数据模型 /** 项目结构体数据模型
    的头像 发表于 10-07 11:10 1072次阅读