替换Python3中的引用

时间:2016-01-06 15:03:24

标签: python python-3.x pass-by-reference

我有一个pythonic列表,其中包含可能重复的对象。例如,

t_list = [object1, object2, object3, object1, object1, object5]

为了消除我使用list(set(t_list))的重复。但在我的数据方案中有许多对象,其中包含对t_list元素的引用。因此,如果我从列表中删除一些元素,它们的引用仍然存在。

我需要在删除重复后自动替换所有现有引用。例如,如果我从t_list中删除第3和第4个元素,引用将指向t_list[0]

如果不循环遍历数据方案的所有元素,我该怎么做?这可能吗?

1 个答案:

答案 0 :(得分:4)

假设您有一个列表和一个数据对象:

t_list = [object1, object2, object3, object1, object1, object5]
# ...
data = {
    'some_path': t_list[1],
    'some_more': {
        t_list[3]
    }
};

这意味着您的数据不依赖于任何形式的列表。您的数据引用了列表中的对象,但这些引用完全独立于t_list。这意味着如果您更改列表:

t_list = list(set(t_list))

对您的data对象没有任何影响,无需进一步操作。您甚至可以忽略该列表。

编辑:

这个小图说明了它们在内存中的对象,列表和引用:

enter image description here

t_list上的转换将从中移除任何多个引用,但数据不会以任何方式更改。