我对此代码的行为感到非常惊讶,该代码位于函数内部:
for user in full_details["users"]:
user = collections.defaultdict(lambda: False, user)
if user["comments"]:
user["comments"] = [comment.__dict__ for comment in user["comments"]]
print("just converted user comments to dict objects")
print(user["comments"])
print("printing full details")
print(full_details)
我的理解是,如果我修改了字典或列表,那么该修改将应用于该对象并保留。但是,当我在user["comments"]
full_details["users"]
中为每个用户更改if
时,我不会再看到这些相同的更改会立即反映在full_details
中。这是为什么?我认为无论何时创建新列表并将其分配给传入参数,该新列表都将保留在函数外部。
我的麻烦是这里所做的改变不会持续下去:
user["comments"] = [comment.__dict__ for comment in user["comments"]]
另外,full_details是default_dict:
full_details = collections.defaultdict(lambda: False, thread_details.__dict__)
答案 0 :(得分:1)
您要两次分配“用户”。首先在for语句中。然后在for循环体的第一行中,您将创建一个新对象并将其分配给“user”。此时,您已丢失对原始对象的引用。