MST

星途 面试题库

面试题:Python中id()函数在内存管理里中等应用问题

假设有两个变量a = [1, 2, 3] 和 b = [1, 2, 3],请解释为什么id(a) != id(b),而如果 a = 5; b = 5,id(a)可能等于id(b),这在Python内存管理机制中有什么体现?
24.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 列表情况(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对于可变对象的内存管理,即使对象内容相同,也会分别为其分配不同的内存空间,以支持对象的独立修改。
  2. 整数情况(a = 5; b = 5
    • 整数在Python中是不可变对象。Python为了优化内存使用,对于一些常用的小整数(通常是 -5 到 256 这个范围,具体范围因Python实现而异),会预先创建并缓存这些整数对象。
    • 当执行a = 5b = 5时,因为5在缓存范围内,ab都指向了缓存中的同一个整数5的对象。所以id(a)可能(实际上在常用小整数范围内一定会)等于id(b)。这体现了Python对于不可变对象且是常用值的内存优化机制,通过复用已有的对象,减少内存开销。