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

Python 里“一切皆对象”不是修辞,是运行时的铁律——每个值都有类型、ID、引用计数,都能调用 __class__、__dict__(如果支持)、dir() 查看行为。
所有字面量和内置类型都返回对象实例
你写 42,Python 立刻创建一个 int 类型的对象;写 "hello",得到一个 str 对象;连 None、True、False 都是单例对象,有固定内存地址。
实操验证:
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 后,os 是 module 对象;class A: 定义后,A 是 type 对象(即元类实例)。它们全支持 isinstance()、getattr()、甚至被 del 删除绑定。
一、外卖通叫餐(预订)系统单店版是什么样的一个系统? 外卖通系列软件是针对非商品性买卖、有别于传统的商城系统的、外卖和预订为概念性的店铺管理系统,我们的口号就是:让所有的门店在网上安个家,以往的版本都是基于多用户性质的平台系统,而外卖通单店版是基于某个店铺的专业外卖预订管理系统,设计了外卖、预订、专题活动、小游戏、资讯、形象、点评、积分、相册等多种功能模块以适应商家办站的各种需求。这套系统可
常见误判点:
- 以为
lambda x: x+1是“匿名函数语法糖”,其实它和def创建的是同一类对象 - 误认为
__builtins__是命名空间字典,实际它是模块对象(type(__builtins__)返回)
对象模型直接影响内存与性能行为
因为一切皆对象,所以:
- 小整数(-5 到 256)被缓存,
a = 100; b = 100时a is b为True;但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]得到的仍是 Pythonint或float对象
真正无法变成对象的,只有字节码指令本身、C 函数指针、以及解释器内部的 GC 标记位——这些用户代码根本碰不到。
所以当你在调试时看到 id() 变化、sys.getrefcount() 异常、或 weakref 失效,别怀疑语言设计,先检查对象生命周期和引用是否符合“一切皆对象”的约束。









