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