如何将对象列表更改为dicts列表?

时间:2015-10-07 23:47:55

标签: python

我对此代码的行为感到非常惊讶,该代码位于函数内部:

        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__)

1 个答案:

答案 0 :(得分:1)

您要两次分配“用户”。首先在for语句中。然后在for循环体的第一行中,您将创建一个新对象并将其分配给“user”。此时,您已丢失对原始对象的引用。