首页 > 编程语言 >python中的数据模型

python中的数据模型

时间:2023-02-19 18:45:42浏览次数:58  
标签:容器 改变 python 回收 对象 垃圾 类型 数据模型

参考:https://docs.python.org/zh-cn/3/reference/datamodel.html

1. 对象、值与类型

对象 是 Python 中对数据的抽象。 Python 程序中的所有数据都是由对象或对象间关系来表示的。 (从某种意义上说,按照冯·诺依曼的“存储程序计算机”模型,代码本身也是由对象来表示的。)

每个对象都有各自的标识号、类型和值。一个对象被创建后,它的 标识号 就绝不会改变;你可以将其理解为该对象在内存中的地址。 'is' 运算符可以比较两个对象的标识号是否相同;id() 函数能返回一个代表其标识号的整数。

CPython 实现细节: 在 CPython 中,id(x) 就是存放 x 的内存的地址。

对象的类型决定该对象所支持的操作 (例如 "对象是否有长度属性?") 并且定义了该类型的对象可能的取值。type() 函数能返回一个对象的类型 (类型本身也是对象)。与编号一样,一个对象的 类型 也是不可改变的。1

有些对象的  可以改变。值可以改变的对象被称为 可变对象;值不可以改变的对象就被称为 不可变对象。(一个不可变容器对象如果包含对可变对象的引用,当后者的值改变时,前者的值也会改变;但是该容器仍属于不可变对象,因为它所包含的对象集是不会改变的。因此,不可变并不严格等同于值不能改变,实际含义要更微妙。) 一个对象的可变性是由其类型决定的;例如,数字、字符串和元组是不可变的,而字典和列表是可变的。

对象绝不会被显式地销毁;然而,当无法访问时它们可能会被作为垃圾回收。允许具体的实现推迟垃圾回收或完全省略此机制 --- 如何实现垃圾回收是实现的质量问题,只要可访问的对象不会被回收即可。

CPython 实现细节: CPython 目前使用带有 (可选) 延迟检测循环链接垃圾的引用计数方案,会在对象不可访问时立即回收其中的大部分,但不保证回收包含循环引用的垃圾。请查看 gc 模块的文档了解如何控制循环垃圾的收集相关信息。其他实现会有不同的行为方式,CPython 现有方式也可能改变。不要依赖不可访问对象的立即终结机制 (所以你应当总是显式地关闭文件)。

注意:使用实现的跟踪或调试功能可能令正常情况下会被回收的对象继续存活。还要注意通过 'try...except' 语句捕捉异常也可能令对象保持存活。

有些对象包含对 "外部" 资源的引用,例如打开文件或窗口。当对象被作为垃圾回收时这些资源也应该会被释放,但由于垃圾回收并不确保发生,这些对象还提供了明确地释放外部资源的操作,通常为一个 close() 方法。强烈推荐在程序中显式关闭此类对象。'try...finally' 语句和 'with' 语句提供了进行此种操作的更便捷方式。

有些对象包含对其他对象的引用;它们被称为 容器。容器的例子有元组、列表和字典等。这些引用是容器对象值的组成部分。在多数情况下,当谈论一个容器的值时,我们是指所包含对象的值而不是其编号;但是,当我们谈论一个容器的可变性时,则仅指其直接包含的对象的编号。因此,如果一个不可变容器 (例如元组) 包含对一个可变对象的引用,则当该可变对象被改变时容器的值也会改变。

类型会影响对象行为的几乎所有方面。甚至对象编号的重要性也在某种程度上受到影响: 对于不可变类型,会得出新值的运算实际上会返回对相同类型和取值的任一现有对象的引用,而对于可变类型来说这是不允许的。例如在 a = 1; b = 1 之后,a 和 b 可能会也可能不会指向同一个值为一的对象,这取决于具体实现,但是在 c = []; d = [] 之后,c 和 d 保证会指向两个不同、单独的新建空列表。(请注意 c = d = [] 则是将同一个对象赋值给 c 和 d。)

 

标签:容器,改变,python,回收,对象,垃圾,类型,数据模型
From: https://www.cnblogs.com/tangjicheng/p/17135032.html

相关文章

  • 【Python】爬虫-Xpath
    Xpath文章参考:https://www.cnblogs.com/mxjhaima/p/13775844.html#案例安装pipinstalllxml引用fromlxmlimportetree获取文档树对象通过Xpath获取文档的......
  • python方法、类方法和静态方法的区别
    classA:deff1():passdeff2(self):pass@classmethoddeff3(cls):pass@staticmethoddeff4():pass......
  • 【Python】Python实现提前查询考研成绩
    ✨Python实现提前查询考研成绩自命题院校可能会在考研成绩正式发布之前将成绩上传到研招网,并进行测试此时就可以提前查询到专业课成绩✨使用说明填写相关信息使用时......
  • python requests 最牛攻略
    目录安装ReuqestsHTTP简介什么是HTTPHTTP工作原理HTTP的9种请求方法HTTP状态码requests快速上手requests发起请求的步骤requests发起请求的两种方式请求参数发起GET......
  • Python报错TypeError: 'NoneType' object is not callable
    Python报错TypeError:'NoneType'objectisnotcallable 保存内容如下  检查src文件后没有发现问题,最终在公共方法找到原因注释掉return了,取消后问题解决 ......
  • 简单的python格网算法算数据密集度demo
    #格网算法计算数据集区域数据密集度importtimeimportrandomimportnumpyasnpimportpandasaspd#模拟数据集defcreate_data():data_x=[]data_y......
  • python代码规范PEP8
    1、引言本文档给出了Python编码规约,主要Python发行版中的标准库即遵守该规约。对于C代码风格的Python程序,请参阅配套的C代码风格指南。本文档和PEP257(文档字......
  • 跟着廖雪峰学python 005
    ​ 函数的调用、定义、参数 ​编辑 #######命名关键字参数没完abs()函数:绝对值>>>abs(100)100>>>abs(-20)20max()函数:接收任意多个参数,并返回最大的那个......
  • 使用python批量转换.jfif文件为.jpg
    python代码如下,有需要的自行取用:需要引入Image库,方法是:pipinstallImage importosfromPILimportImageroot_dir=r'C:\temp'deflist_files(root_dir):......
  • python--matplotlib(1)
    前言 Matplotlib画图工具的官网地址是http://matplotlib.org/Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示。......