当前位置:首页>python>阿里、字节高频面试题:Python里的__slots__,为什么很多高手都在用?

阿里、字节高频面试题:Python里的__slots__,为什么很多高手都在用?

  • 2026-09-08 12:02:35
阿里、字节高频面试题:Python里的__slots__,为什么很多高手都在用?

最近刷牛客网的时候。

看到一位同学分享自己的Python面试经历。

前面的问题都很顺利:

  • GIL是什么?
  • 深拷贝和浅拷贝区别?
  • Python为什么有垃圾回收?

结果。

面试官突然问了一句:

你用过 __slots__ 吗?

现场一下安静了。

很多评论区的同学表示:

听过,但没用过。

还有人说:

工作三年,从来没写过。

可偏偏。

这道题却越来越容易出现在阿里、字节、美团、百度等公司的Python面试里。

为什么?

因为它考察的不是语法。

而是:

你有没有真正理解Python对象是如何存储的。


一个普通的Python对象

先来看一段代码。

class User: passu = User()u.name = ”Tom”u.age = 18

是不是每天都在写?

看起来没有任何问题。

但是。

很多人不知道的是。

每创建一个对象。

Python都会偷偷创建一个:

__dict__

它专门用来保存对象属性。

例如:

print(u.__dict__)

输出:

{ ”name”: ”Tom”, ”age”: 18}

是不是很方便?

当然。

方便的另一面。

就是:

更大的内存开销。


为什么大厂开始关注这个问题?

假设。

你的系统里只有10个对象。

多一点内存。

无所谓。

但如果呢?

100万用户对象500万个订单对象1000万个日志对象

每个对象都有一个独立的:

__dict__

累计下来。

就是一笔不小的内存成本。

所以。

很多高性能Python程序。

都会考虑:

有没有办法让对象更轻?

答案就是:

__slots__

__slots__ 到底是什么?

来看代码:

class User: __slots__ = (”name”, ”age”)

之后:

u = User()u.name = ”Tom”u.age = 18

完全没问题。

但是:

u.address = ”Shanghai”

直接报错。

为什么?

因为:

对象只能拥有:

nameage

这两个属性。

Python不会再创建:

__dict__

而是直接为对象预留固定空间。

好处是什么?

官方解释很直接:

减少内存占用,同时属性访问也可能更快。


一个很多人不知道的事实

很多人第一次看到这里。

都会说:

那以后所有类都写:

__slots__

是不是更好?

答案:

不是。

千万不要。

😄

因为:

它也是有代价的。

例如:

不能随意新增属性。

很多依赖动态属性的框架。

就不适合使用。

所以。

优秀工程师思考的问题不是:

能不能优化?

而是:

值不值得优化?

这才是真正的工程思维。


面试官真正想听什么?

如果面试官问:

__slots__ 有什么作用?

普通回答:

节省内存。

优秀回答:

__slots__ 通过限制实例属性并避免为每个实例创建 __dict__,可以减少大量对象的内存占用,在对象数量巨大的场景中效果明显。同时,它限制了动态添加属性,因此需要根据业务场景权衡使用。

区别在哪里?

前者记住了结论。

后者理解了设计。


AI时代,一个变化越来越明显

过去。

企业喜欢问:

Python语法。

今天。

越来越喜欢问:

Python为什么这样设计?

为什么?

因为:

AI已经能生成:

class User: ...

AI还能生成:

def login(): ...

甚至还能写完整项目。

但是。

如果问AI生成的代码:

为什么这里要用:

__slots__

什么时候不该用?

什么时候收益最高?

真正做技术决策的人。

依然是工程师。


牛客网上高频出现的面试规律

仔细看最近几年Python面经。

你会发现:

真正高频的问题。

几乎都不是语法。

而是设计思想。

例如:

  • 为什么字典查询快?
  • 为什么生成器节省内存?
  • 为什么GIL存在?
  • 为什么深拷贝更耗资源?
  • 为什么 __slots__ 能优化内存?

这些问题。

最后都会指向同一个答案:

理解Python解释器。

而不是:

记住Python语法。


我的一个观点

很多程序员每天都在学新框架。

今天学AI。

明天学Agent。

后天学MCP。

看起来很努力。

实际上却忽略了真正重要的东西。

因为:

框架一年一个版本。

模型半年一次升级。

唯独:

计算机基础不会过时。

Python对象模型不会轻易改变。

数据结构不会轻易改变。

内存管理思想不会轻易改变。

真正值钱的。

永远都是这些底层能力。


写在最后

很多人觉得:

Python简单。

所以学Python容易。

其实恰恰相反。

Python入门很容易。

真正学深。

一点也不简单。

从:

forifdef

到:

GIL生成器装饰器__slots__垃圾回收对象模型

每向下一层。

都会看到一个新的世界。

所以。

如果今天有人问我:

怎样才能真正学好Python?

我的答案只有一句:

不要只会写代码,更要理解代码为什么这样写。

因为未来AI可以帮你写出一万行代码。

却替代不了你理解这一万行代码。

🚀

点个「在看」。

愿你下一次面对Python面试时,回答的不只是API,而是整个设计思想。

毕竟。

真正优秀的Python工程师,写的不只是代码,更是对计算机世界的理解。

最新文章

随机文章