首先我们创建列表a:
a=[1,2,3]
通常我们复制一个元素的方法是这样的:
b=a #复制元素的一般方法 print(a) print(b) 结果为: [1,2,3] [1,2,3]
通过这行代码,我们固然是创建了一个与列表a相等的列表b,但此时却会出现一个问题:
当我们尝试对新创建的列表b进行排序操作(如倒序操作)时:
b.reverse() print(b) 结果为: [3,2,1]
让我们尝试打印一下列表a的值:
print(a) 结果为: [3,2,1]
可以看到,列表a的排序也改变了
这未必是我们希望看到的结果
出现这种情况的原因是:
当我们使用“b=a”这条代码来赋值列表b时,列表b与列表a是指向同一个地址的,而对列表进行排序操作并不会赋给列表一个新的地址,也就是说此时无论我们是对列表a或是对列表b进行排序操作,另一个列表的排序也会随之改变
而如果我们对列表a或是对列表b进行赋值操作的话,则没有这种顾虑,因为在赋值的时候列表会分配到一个新的地址
那么我们要如何解决这一问题呢?
很简单,只需利用列表的分片,使用如下代码对列表进行复制操作:
a=[1,2,3] b=a[:] #复制列表的正确方式 print(a) print(b) 结果为: [1,2,3] [1,2,3]
此时我们再对列表b进行倒序操作:
b.reverse() print(a) print(b) 结果为: [1,2,3] [3,2,1]
可以看到只有列表b的排序改变了,而列表a的排序没有变,那是因为列表a和列表b已经没有那种剪不断理还乱的羁绊了 (乛?乛
)
原文:https://www.cnblogs.com/toxic-antidote/p/11409151.html