Python切片用法疑问:为何用a = b[:]而非a = b复制列表?
为什么在Python中用
a = b[:]而不是a = b复制列表? - 首先得搞懂Python里列表的赋值逻辑:
a = b并不是复制列表,只是让变量a和b指向同一个列表对象。这时候你对a做任何修改(比如添加、删除元素),都会同步影响到b,因为它们本质上是同一个东西。 - 而
a = b[:]是创建原列表的浅拷贝,会生成一个全新的列表对象,里面的元素和原列表一致。修改这个新列表a时,原始的b不会受到任何影响——这正是Yocto的insane.bbclass里需要的效果:避免修改副本时意外改动原始数据,防止出现难以排查的bug。
举个直观的例子:
# 用a = b的情况 b = [1, 2, 3] a = b a.append(4) print(b) # 输出 [1, 2, 3, 4],原列表被修改了 # 用a = b[:]的情况 b = [1, 2, 3] a = b[:] a.append(4) print(b) # 输出 [1, 2, 3],原列表保持不变
内容的提问来源于stack exchange,提问作者Étienne
相关产品推荐
相关产品推荐

