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
您的数据计数器是字典。字典是可变对象。当您将 self.data_counter 分配给 prev_data_counter 时,您实际上只是保存了对同一个字典对象的引用。因此,当您更新 self.data_counter 时,您也会更新 prev_data_counter - 它们引用同一个对象。
您需要创建字典的副本:
prev_data_counter = self.data_counter.copy()
我在将变量 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
您的数据计数器是字典。字典是可变对象。当您将 self.data_counter 分配给 prev_data_counter 时,您实际上只是保存了对同一个字典对象的引用。因此,当您更新 self.data_counter 时,您也会更新 prev_data_counter - 它们引用同一个对象。
您需要创建字典的副本:
prev_data_counter = self.data_counter.copy()