MST

星途 面试题库

面试题:Python列表切片:切片与内存管理

已知列表 `a = [1, 2, 3, 4, 5]`,执行 `b = a[1:3]`,然后修改 `b[0] = 10`。分析 `a` 和 `b` 在内存中的存储结构变化,以及Python是如何处理这种列表切片导致的内存分配和引用关系的。并说明如果想要 `b` 是 `a` 切片的一个完全独立副本(修改 `b` 不影响 `a`),应该如何操作。
39.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. ab 在内存中的存储结构变化及处理机制
    • 列表 a = [1, 2, 3, 4, 5] 在内存中是一个连续存储的列表对象,每个元素占据一定的内存空间。
    • 执行 b = a[1:3] 时,Python 创建了一个新的列表对象 b,它包含 a 中索引从 1 到 2 的元素(即 [2, 3])。这里 b 是一个新的列表对象,有自己独立的内存地址。但是,b 中的元素 23 仍然引用 a 中对应的元素对象。
    • 当执行 b[0] = 10 时,b 列表的第一个元素的引用被改变,它不再引用 a 中的 2,而是引用新的整数对象 10。而 a 列表本身并没有受到影响,因为 b 是一个新的列表对象,只是初始元素引用了 a 中的部分元素。a 仍然保持 [1, 2, 3, 4, 5]b 变为 [10, 3]
  2. 获取完全独立副本的操作
    • 可以使用列表的 copy 方法,即 b = a[1:3].copy()。这样 ba 切片 [1:3] 的一个完全独立副本,修改 b 不会影响 a
    • 也可以使用 list 构造函数,b = list(a[1:3]),同样能得到一个完全独立的副本。
    • 还可以使用切片语法 b = a[1:3][:],也能实现创建完全独立副本的效果。