a = [[10,11], 20]
b = a[:]
c = list(a)
d = a * 1
e = copy.copy(a)
f = copy.deepcopy(a)
g = a
a.append(21)
a[0].append(11)
print(id(a), a)
print(id(b), b)
print(id(c), c)
print(id(d), d)
print(id(e), e)
print(id(f), f)
print(id(g), g)
输出
2531220589064 [[10, 11, 11], 20, 21]
2531221557832 [[10, 11, 11], 20]
2530814160200 [[10, 11, 11], 20]
2531220589960 [[10, 11, 11], 20]
2531220590344 [[10, 11, 11], 20]
2531211854408 [[10, 11], 20]
2531220589064 [[10, 11, 11], 20, 21]
从以上可以看出,使用 a[:], list(a), a*1, copy.copy(a)四种方式复制列表结果都可以得到一个新的列表,但是如果列表中含有列表,所有b, c, d, e四个新列表的子列表都是指引到同一个对象上。只有使用copy.deepcopy(a)方法得到的新列表f才是包括子列表在内的完全复制。然后=
是原来的列表,只是多一个指向