你好呀,Python爱好者!👋 你是否曾听大佬们说“Python里连数字都是对象”?🤔 今天,我们就来聊聊这个让新手懵圈、老手直呼内行的 “一切皆对象” 哲学!
🚀 一、一个让新手怀疑人生的例子
先看这段代码:
a = 5
b = 5
print(a is b) # 输出啥?True还是False?
答案:True!
惊不惊喜?连数字5都不是“值”,而是内存中的某个神秘对象!这背后的秘密,正是Python的对象模型。
📦 二、解剖Python对象:身份证、户口本和肉身
Python中每个数据(是的,每一个!)都是对象,自带三大“基因”:
-
身份证号:
id(obj),代表对象的内存地址,独一无二! -
户口类型:
type(obj),决定对象能干啥(如int会加减乘除)。 -
肉身数据:对象存储的具体值,比如
5或"hello"。
举个栗子🌰:
s = "信息科技云课堂"
print(id(s)) # 输出一串神秘数字:对象的“家门牌号”
print(type(s)) # <class 'str'>,原来是字符串家族!
print(s.upper()) # "码农人生"变身大写?错!中文表示不背这锅😂
🔄 三、变量?只是对象的“快捷方式”!
重要结论:变量不是“盒子”,而是对象的“贴纸”!
-
执行
a = 1000时,Python在内存中创建了一个int对象,然后给这个对象贴上了a的标签。 -
再执行
b = a,不过是把同一张对象贴纸复制给了b!
a = 1000
b = a
print(id(a) == id(b)) # True,贴纸指向同一个对象!
🎭 四、颠覆认知:这些居然全是对象!
你以为只有数字和字符串?格局打开!
✅ 函数是对象:能当参数传递、能赋值给变量!
✅ 类是对象:类本身是type类的实例(元类黑魔法的基础)
✅ 模块是对象:import numpy后,numpy也是个对象!
✅ None是对象:它是NoneType家的独苗!
def 唱首歌():
print("🎵 爱你孤身走暗巷~")
唱歌 = 唱首歌
唱歌() # 输出歌声!函数对象被“转手”了
print(type(int)) # <class 'type'>,int类竟是type类的孩子!
🔧 五、对象分两种:钢铁直男与变形金刚
-
钢铁直男(不可变对象):
int,str,tuple。
试图修改?不!直接造个新对象。
a = 5
a += 1 # 新对象诞生,旧对象原地去世(可能)
-
变形金刚(可变对象):
list,dict。
原地变身,内存地址不变!
lst = [1, 2]
lst.append(3) # 还是那个lst,但内涵变了!
❓ 六、灵魂拷问区
-
为什么
a = 257; b = 257时a is b可能是False? -
如何让函数“记住”上次调用的状态?(提示:可变对象妙用)
-
(评论区等你提问!)
🎯 七、为什么关心“万物皆对象”?
-
写代码更高效:理解可变/不可变对象,避免Bug坑!
-
装X必备:面试时侃晕面试官!
-
掌握高阶玩法:装饰器、元类…这些骚操作全基于对象模型!
🔥 挑战任务:
在Python中运行这段代码,并思考为什么?
a = "hello"
b = "hello"
print(a is b) # 输出True还是False?

205

被折叠的 条评论
为什么被折叠?



