Python3关于列表与等号的随笔

无意中发现了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]    #正确的结果

就酱= ̄ω ̄=

猜你喜欢

转载自www.cnblogs.com/toshihiko/p/12741106.html