无意中发现了Python3在列表中有一个坑,特此记下来
众所周知,一个旧变量赋值给一个新变量,然后操作旧变量,此时新变量是不会因旧变量的操作而改变的。
例如在交互式下:
>>> a = 10 >>> b = a >>> a += 10 >>> a 20 >>> b 10
不清楚的小白可能会把这个结论推理到列表,自然也认为以下情况是对的(交互式):
>>> a = [10, 20] >>> b = a >>> a[0] += 10 >>> a [20, 20] >>> b [10, 20] # 幻想的,错误的结果
然而,正确的结果是 [20, 20]
同理,字典也是如此(元组本人无法查证)
>>> a = {"a" : 1, "b" : 2} >>> b = a >>> a["a"] = 3 >>> a {'a': 3, 'b': 2} >>> b {'a': 3, 'b': 2}
问题来了,如果我只是想复制旧列表里的值、旧字典的键值,但又不想和新变量有这样“藕断丝连”的关系,该怎么操作捏?
这里提供两种:copy方法和切片
>>> a = [10, 20] >>> b = a.copy() # 注意这里 >>> a[0] += 10 >>> a [20, 20] >>> b [10, 20] # 正确的结果
>>> a = [10, 20] >>> b = a[:] # 注意这里 >>> a[0] += 10 >>> a [20, 20] >>> b [10, 20] #正确的结果
就酱= ̄ω ̄=