MST

星途 面试题库

面试题:Python中浅拷贝与深拷贝对内存影响的基础分析

假设有一个列表嵌套列表的结构 `a = [[1, 2], [3, 4]]`,先对其进行浅拷贝得到 `b = copy.copy(a)`,再对 `a[0][0]` 进行修改为5。请分析此时 `a` 和 `b` 在内存中的变化情况,以及它们之间的关系。
20.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 内存变化情况

    • a的内存变化a原本指向一个包含两个子列表的列表对象。当修改a[0][0]为5时,a所指向的列表对象中第一个子列表的第一个元素被改变。由于列表是可变对象,这种修改直接在原内存位置进行。
    • b的内存变化b是通过浅拷贝得到的,浅拷贝只复制了外层列表对象,而内层子列表仍然是引用。所以当a[0][0]被修改时,因为b中第一个子列表与a中第一个子列表指向同一个内存位置,b中的b[0][0]也会随之变为5。
  2. 它们之间的关系

    • ab是不同的列表对象(即id(a) != id(b)),因为浅拷贝创建了一个新的外层列表。
    • 但是它们内部的子列表是共享的,即id(a[0]) == id(b[0])id(a[1]) == id(b[1])。所以对a中某个子列表元素的修改会反映到b中相应子列表的相同位置元素上。

    示例代码验证(Python):

    import copy
    a = [[1, 2], [3, 4]]
    b = copy.copy(a)
    a[0][0] = 5
    print(a)
    print(b)
    

    输出:

    [[5, 2], [3, 4]]
    [[5, 2], [3, 4]]