问题
首先来看一小段列表推到的python代码
a = [1,2,3]
b = a
# 赋值1
b[:] = [x+1 for x in a]
print(a,b)
# 赋值2
b = [x-1 for...x in a]
print(a,b)
来看看输出吧:
[2, 3, 4] [2, 3, 4]
[2, 3, 4] [1, 2, 3]
可能有人会有疑问,为什么同样是复制操作,结果却不同?...2. step by step
其实我们有结果再推原因,应该大概可以知道可能b[:]和a是共享同一块内存的,实践是检验真理的唯一标准,让我们分别在赋值1和赋值2之后分别输出a,b的内存地址如下:
140348034061384...140348034061384
140348034061384 140348034060872
果不其然,第一次a,b都指向的是同一块内存,而赋值2则是在原来的地址上做修改,或者可以分别输出a is...改成a的切片
b = a[:]
print(a,b)
print(id(a),id(b))
b = [x-1 for x in a]
print(a,b)
print(id(a),id(b))
此时的输出为