阅读时 profile.py
python标准库我遇到了赋值语句 sys.argv[:] = args
,用于修改 sys.argv
使程序被分析查看正确的命令行参数。我明白这不同于 sys.argv = args[:]
在实际操作中,但是 有效 他们看起来和我一样。是否有人想要使用一个而不是另一个?并且是 a[:] = b
一个常见的蟒蛇成语?
更新:在这种特定情况下,为什么选择一个而不是另一个呢? (来源可以在 main
的功能 profile.py
)
阅读时 profile.py
python标准库我遇到了赋值语句 sys.argv[:] = args
,用于修改 sys.argv
使程序被分析查看正确的命令行参数。我明白这不同于 sys.argv = args[:]
在实际操作中,但是 有效 他们看起来和我一样。是否有人想要使用一个而不是另一个?并且是 a[:] = b
一个常见的蟒蛇成语?
更新:在这种特定情况下,为什么选择一个而不是另一个呢? (来源可以在 main
的功能 profile.py
)
不同的是,当你使用时 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]
不同的是,当你使用时 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]