MST

星途 面试题库

面试题:Python变量标签内存地址追踪基础应用

在Python中,已知有如下代码:a = [1, 2, 3]; b = a; a.append(4)。请说明a和b的内存地址变化情况,并且解释为什么会这样,如何使用内置函数来验证你的说法?
32.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 内存地址变化情况
    • 最初,a = [1, 2, 3]创建了一个列表对象,a指向这个列表对象的内存地址。
    • 然后b = a,此时b也指向a所指向的同一个列表对象的内存地址,即ab的内存地址相同。
    • 执行a.append(4)后,列表对象在原有基础上进行了修改,添加了元素4。由于ab指向同一个列表对象,所以ab的内存地址依然相同,没有发生变化。
  2. 原因解释
    • 在Python中,变量名是对象的引用。当b = a时,实际上是让b引用了a所指向的对象,而不是创建一个新的列表对象并复制a的内容。所以ab是对同一个列表对象的不同引用。当对列表对象(通过a)进行修改时,由于b引用的也是这个对象,所以通过b访问该对象时也能看到修改后的结果。
  3. 使用内置函数验证
    • 可以使用id()函数来获取对象的内存地址。
    a = [1, 2, 3]
    b = a
    print(id(a))
    print(id(b))
    a.append(4)
    print(id(a))
    print(id(b))
    
    • 在上述代码中,在a.append(4)前后分别打印ab的内存地址(通过id()函数获取),会发现ab在整个过程中的内存地址始终相同,验证了上述说法。