代码:
a = [1,2,3]
b = a
c = []
c = a
d = a[:]
a,b,c,d
print("a,b,c,d:",a,b,c,d)
print("id(a),id(b),id(c),id(d):",id(a),id(b),id(c),id(d))
b[0] = "b"
print("a,b,c,d:",a,b,c,d)
print("id(a),id(b),id(c),id(d):",id(a),id(b),id(c),id(d))
c[0] = "c"
print("a,b,c,d:",a,b,c,d)
print("id(a),id(b),id(c),id(d):",id(a),id(b),id(c),id(d))
d[0] = "d"
print("a,b,c,d:",a,b,c,d)
print("id(a),id(b),id(c),id(d):",id(a),id(b),id(c),id(d))
代码输出:
a,b,c,d: [1, 2, 3] [1, 2, 3] [1, 2, 3] [1, 2, 3]
id(a),id(b),id(c),id(d): 2782355445192 2782355445192 2782355445192 2782355356936
a,b,c,d: ['b', 2, 3] ['b', 2, 3] ['b', 2, 3] [1, 2, 3]
id(a),id(b),id(c),id(d): 2782355445192 2782355445192 2782355445192 2782355356936
a,b,c,d: ['c', 2, 3] ['c', 2, 3] ['c', 2, 3] [1, 2, 3]
id(a),id(b),id(c),id(d): 2782355445192 2782355445192 2782355445192 2782355356936
a,b,c,d: ['c', 2, 3] ['c', 2, 3] ['c', 2, 3] ['d', 2, 3]
id(a),id(b),id(c),id(d): 2782355445192 2782355445192 2782355445192 2782355356936
可以看到a b c三个是同一id值,当改变当中任一列表元素的值后,三者会同步改变。
但d的元素值不会变,改变d的元素值其它三个变量内的元素值也不会变。
从a b c d的id值来看,a b c地址全一样,唯有d分配了新地址。
所以一般情况下想复制得到一个新列表并改变新列表内元素而不影响原列表,可以采用d的赋值方式。
这只是针对这种比较单一的普通列表。