gpt4 book ai didi

python - 分配给 vs. 来自切片

转载 作者:太空狗 更新时间:2023-10-29 18:05:54 25 4
gpt4 key购买 nike

在阅读 python 标准库的 profile.py 时,我遇到了赋值语句 sys.argv[:] = args,它用于修改 sys .argv 使被分析的程序看到正确的命令行参数。我知道这在实际操作中与 sys.argv = args[:] 不同,但实际上它们对我来说看起来是一样的。是否存在一个人想使用一个而不是另一个的情况? a[:] = b 是一个常见的 Python 习语吗?

更新:在这种特定情况下,为什么要选择一个而不是另一个? (源码可以在profile.pymain函数中找到)

最佳答案

区别在于,当您使用 a[:] = b 时,这意味着您将覆盖 a 上已有的任何内容。如果您有其他引用 a 的内容,它也会发生变化,因为它一直引用相同的位置。

另一方面,a = b[:] 创建了一个新引用,并将 b 中的所有值复制到这个新引用中。因此,对旧数据的现有引用将继续指向旧数据。

考虑这个例子:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = a # c is a reference to the list in a
>>> c
[1, 2, 3]
>>>
>>> a[:] = b
>>> a # a will have a copy of the list in b
[4, 5, 6]
>>> c # and c will keep having the same value as a
[4, 5, 6]
>>>
>>> b = [7, 8, 9]
>>> a = b[:]
>>> a # a has the new value
[7, 8, 9]
>>> c # c keeps having the old value
[4, 5, 6]

关于python - 分配给 vs. 来自切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182333/

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