面试题答案
一键面试- 列表情况(
a = [1, 2, 3]; b = [1, 2, 3]
):- 在Python中,列表是可变对象。当执行
a = [1, 2, 3]
时,会在内存中创建一个新的列表对象,并将变量a
指向这个对象。当执行b = [1, 2, 3]
时,又会在内存中创建一个新的列表对象(即使其内容与a
指向的列表相同),并将变量b
指向这个新的对象。 id()
函数返回对象的唯一标识符,由于这是两个不同的列表对象,所以id(a) != id(b)
。这体现了Python对于可变对象的内存管理,即使对象内容相同,也会分别为其分配不同的内存空间,以支持对象的独立修改。
- 在Python中,列表是可变对象。当执行
- 整数情况(
a = 5; b = 5
):- 整数在Python中是不可变对象。Python为了优化内存使用,对于一些常用的小整数(通常是 -5 到 256 这个范围,具体范围因Python实现而异),会预先创建并缓存这些整数对象。
- 当执行
a = 5
和b = 5
时,因为5在缓存范围内,a
和b
都指向了缓存中的同一个整数5的对象。所以id(a)
可能(实际上在常用小整数范围内一定会)等于id(b)
。这体现了Python对于不可变对象且是常用值的内存优化机制,通过复用已有的对象,减少内存开销。