gpt4 book ai didi

python - 列表增量快捷方式 (a+=[1]) 和更长方式 (a=a+[1]) 之间的区别

转载 作者:行者123 更新时间:2023-12-04 09:54:22 24 4
gpt4 key购买 nike

我正在使用 Python 版本 3.7.5

我意识到我的代码中有一个错误来转换一些数据,并且我已经尽力创建了该问题的最小工作示例。

首先,这是按我预期工作的代码:

a = ['foo','bar']
b = ['spam','eggs']
c = {'glue':a, 'dill':b}

for i in range(23,25):
c['dill'] = c['dill'] + [i]
print(b)
print(c)
# ['spam', 'eggs']
# {'glue': ['foo', 'bar'], 'dill': ['spam', 'eggs', 23, 24]}

for中的代码循环不影响 b 的值.

但是当我切换到使用增量运算符时,情况不再如此:
a = ['foo','bar']
b = ['spam','eggs']
c = {'glue':a, 'dill':b}

for i in range(23,25):
c['dill'] += [i]
print(b)
print(c)
# ['spam', 'eggs', 23, 24]
# {'glue': ['foo', 'bar'], 'dill': ['spam', 'eggs', 23, 24]}

在使用 Python 时,我的印象一直是:
  • a += 1a = a + 1做了完全一样的事情
  • 当基于另一个变量 ( b=a ) 定义变量时,对新变量 ( b=f(b) ) 的后续更改不会影响原始变量

  • 上面的例子似乎违反了这两个假设。到底是怎么回事?

    最佳答案

    您的假设 1 和 2 适用于数值类型(不可变类型,不确定 Python 中的正确术语),例如数字或字符串,但不适用于列表。

    这两个问题都与同一件事有关:list Python 中的(数组)变量是对可变对象的引用。
    a = [1, 2, 3]创建一个列表。
    b = ab现在是对与 a 相同的列表的引用.任何改变所引用数组的操作都将“影响两个变量”。

    如果将新列表分配给其中一个变量,它们将不再引用内存中的同一个对象。

    What does += mean in Python? (感谢 nocimambi 提供链接)详细了解如何+=变异相同的数组,而 +确实创建了一个新数组。

    关于python - 列表增量快捷方式 (a+=[1]) 和更长方式 (a=a+[1]) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61956551/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com