第一个代码片段:
NULL
第二个代码片段:
>>> a = 5
>>> b = 7
>>> a, b = b, a
>>> a == 7
True
>>> b == 5
True
我的任务是编写一个交换两个变量值的函数。但是它不能返回任何值。我知道我可以添加第三个变量,但是我想找出第二个代码片段出了什么问题。
答案 0 :(得分:2)
您将直接替换列表对象的内容,而不交换变量。因为首先替换了second_obj
的内容,然后使用second_obj
替换了first_obj
的内容,所以最后两个列表中的first_obj
列表的内容都结束了。
让我们为列表对象提供参考ID,以区分它们。变量名first_obj
和second_obj
本身就是对两个列表的引用:
first_obj
引用ID {L1}
,值[1, 2, 3]
second_obj
引用ID {L2}
,值[4, 5, 6]
接下来会发生什么:
{L2}
排在最后。{L1}
,然后是{L2}
。second_obj[:]
,它将替换列表second_obj
引用中的所有值。 {L1}
中包含的值将复制到{L2}
中。 {L2}
现在是[1, 2, 3]
。堆栈顶部已移除。first_obj[:]
,它将替换列表first_obj
引用中的所有值。 {L2}
中包含的值将复制到{L1}
中。 {L1}
现在是[1, 2, 3]
。堆栈顶部已移除。您可以通过首先创建second_obj
的副本来使交换工作:
second_obj[:], first_obj[:] = first_obj, second_obj[:]