【发布时间】:2020-05-20 13:37:58
【问题描述】:
我写的代码:
def function_1(object_1, list_1):
list_to_return = []
for x in list_1:
object_1['key_1'] = [x]
list_to_return.append(object_1)
return list_to_return
if __name__ == "__main__":
object_main = {
"key_1":['item1'],
"key_2":['item1', 'item2']
}
list1_main = ['1','2', '3']
ret_val = function_1(object_main, list1_main)
print(ret_val)
编写代码以将对象中的 key_1 项替换为列表中的每个项:list1_main。该函数按预期在函数中替换键。但是 print 语句的输出如下:
[{'key_1': ['3'], 'key_2': ['item1', 'item2']}, {'key_1': ['3'], 'key_2': ['item1', 'item2']}, {'key_1': ['3'], 'key_2': ['item1', 'item2']}]
预期的输出是:
[{'key_1': ['1'], 'key_2': ['item1', 'item2']}, {'key_1': ['2'], 'key_2': ['item1', 'item2']}, {'key_1': ['3'], 'key_2': ['item1', 'item2']}]
不确定代码为什么会这样。 Python 版本:3.8
【问题讨论】:
-
您将相同的对象/引用附加到
list_to_return。无论在何处引用,都会看到原始列表的更改 -
你通过引用传递,传递一个副本
-
谢谢。有效。 list_to_return.append(object_1) 我把这一行改成 list_to_return.append(dict(object_1))
标签: python python-3.x