Python: 存储自身变量的值

Python: Storing value of self Variable

我在将变量 self.data_counter 存储在其他变量(如 prev_counter_data 中时遇到问题。 我根本无法存储当前值 - 我分配给 self.data_counter 的变量总是以某种方式具有完全相同的值。

class SimpleSwitch(app_manager.RyuApp):

    def __init__(self, *args, **kwargs):
        super(SimpleSwitch, self).__init__(*args, **kwargs)
        self.data_counter = {}
        self.monitor_thread = hub.spawn(self._monitor)

    def _monitor(self):
        timer = 0
        prev_data_counter = self.data_counter
        while True:
            hub.sleep(5)
            timer = timer + 5
            # assign current values to self.data_counter in func()
            func()
            # compare current values to previous values

            if (timer%60) == 0:
                prev_data_counter = self.data_counter

知道我的想法的缺陷在哪里吗?为什么 prev_data_counter 总是等于 self.data_counter

字典 self.data_counter 包含 [(id, port):traffic] 等信息。我可以通过 self.data_counter[id][port] = traffic.

赋值

当你这样做时 self.prev_data_counter = self.data_counter 我们说它们是同一个对象。

尝试:

self.prev_data_counter = copy.copy(self.data_counter)

并添加复制包:import copy

另请参阅: https://docs.python.org/2/library/copy.html

您的数据计数器是字典。字典是可变对象。当您将 self.data_counter 分配给 prev_data_counter 时,您实际上只是保存了对同一个字典对象的引用。因此,当您更新 self.data_counter 时,您也会更新 prev_data_counter - 它们引用同一个对象。

您需要创建字典的副本:

prev_data_counter = self.data_counter.copy()