0

0

Python 为什么一切皆对象

舞夢輝影

舞夢輝影

发布时间:2026-01-28 19:31:10

|

749人浏览过

|

来源于php中文网

原创

Python中一切皆对象是运行时铁律:所有值(含字面量、函数、模块、类)均为对象实例,具有类型、ID、引用计数,支持统一操作接口与运行时灵活性。

python 为什么一切皆对象

Python 里“一切皆对象”不是修辞,是运行时的铁律——每个值都有类型、ID、引用计数,都能调用 __class____dict__(如果支持)、dir() 查看行为。

所有字面量和内置类型都返回对象实例

你写 42,Python 立刻创建一个 int 类型的对象;写 "hello",得到一个 str 对象;连 NoneTrueFalse 都是单例对象,有固定内存地址。

实操验证:

print(type(42))        # 
print(id(True))        # 一个固定数字(CPython 中恒定)
print(hasattr([], '__len__'))  # True —— 列表对象自带方法

这意味着你不能绕过对象模型去“操作原始值”:没有 C 那样的上整数或寄存器变量,一切访问都经由对象指针。

立即学习Python免费学习笔记(深入)”;

函数、模块、类本身也是对象

def 定义的函数是 function 类型的实例,可赋值给变量、作为参数传入、动态添加属性:

def greet(): return "hi"
greet.custom_flag = True
print(greet.__name__)     # "greet"
print(greet.custom_flag)  # True

同理:import os 后,osmodule 对象;class A: 定义后,Atype 对象(即元类实例)。它们全支持 isinstance()getattr()、甚至被 del 删除绑定。

全诚外卖通外卖预订管理系统单店版
全诚外卖通外卖预订管理系统单店版

一、外卖通叫餐(预订)系统单店版是什么样的一个系统? 外卖通系列软件是针对非商品性买卖、有别于传统的商城系统的、外卖和预订为概念性的店铺管理系统,我们的口号就是:让所有的门店在网上安个家,以往的版本都是基于多用户性质的平台系统,而外卖通单店版是基于某个店铺的专业外卖预订管理系统,设计了外卖、预订、专题活动、小游戏、资讯、形象、点评、积分、相册等多种功能模块以适应商家办站的各种需求。这套系统可

下载

常见误判点:

  • 以为 lambda x: x+1 是“匿名函数语法糖”,其实它和 def 创建的是同一类对象
  • 误认为 __builtins__ 是命名空间字典,实际它是模块对象(type(__builtins__) 返回

对象模型直接影响内存与性能行为

因为一切皆对象,所以:

  • 小整数(-5 到 256)被缓存,a = 100; b = 100a is bTrue;但 a = 1000; b = 1000 时可能为 False(取决于解释器实现)
  • 字符串拼接 s += "x" 在循环中会反复新建 str 对象,比 list.append() + ''.join() 慢一个数量级
  • 即使空列表 [] 也占约 56 字节(CPython 3.12),因为它要维护引用计数、类型指针、长度、分配容量等字段

这不是设计缺陷,而是取舍:用内存和间接层换来了统一的接口(如所有对象都能被 pickle 序列化)和运行时灵活性(如 monkey patch)。

例外?只有编译期字面量优化和底层 C 扩展能“绕开”

严格来说,有两处不完全暴露对象身份:

  • CPython 对短字符串和小整数做驻留(interning),但驻留后的值仍是对象,只是复用内存地址
  • 某些 C 扩展(如 array.array 或 NumPy 的 ndarray)内部用连续内存块存数据,但其 Python 层封装依然是对象——你调用 arr[0] 得到的仍是 Python intfloat 对象

真正无法变成对象的,只有字节码指令本身、C 函数指针、以及解释器内部的 GC 标记位——这些用户代码根本碰不到。

所以当你在调试时看到 id() 变化、sys.getrefcount() 异常、或 weakref 失效,别怀疑语言设计,先检查对象生命周期和引用是否符合“一切皆对象”的约束。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

579

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

102

2025.10.23

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

613

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

588

2024.04.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号