Python:对象变量vs独立变量

时间:2017-06-15 17:39:43

标签: python object dictionary

我正在编写一个堆栈类MyStack,作为列表实现,其中每个元素都是一个包含两个字段('a''b')的字典。这些字典字段中的每一个本身都是一个列表(在push()中初始化为空列表)。除了push()pop()(后者为了可读性而跳过了),我打算将add元素添加到堆栈顶部元素的这些列表(字典字段)中(index { {1}})。

问题是值被添加到两个字典字段中,而不仅仅是所选字段。但是,我使用独立变量[-1]对此进行测试,我测试的变量与对象standalone_stack的{​​{1}}变量相同。令人惊讶的是,我得到了我想要的东西 - 我只追加到选定的字段。这是代码:

stack

我的Python 2.7.6输出如下:

MyStack

我需要帮助的是:

  • 当同一个列表是对象( class MyStack(object): def __init__(self): self.stack = [] def push(self): self.stack.append(dict.fromkeys(['a', 'b'], [])) def add(self, field, value): self.stack[-1][field].append(value) def __str__(self): return str(self.stack) def lists_the_same(list1, list2): if list1 == list2: print 'Yes, the same' else: print 'No, not the same' # Create essentially the same data in two different ways: ms = MyStack() standalone_stack = [{'a': [], 'b': []}] ms.push() print ms print standalone_stack lists_the_same(ms.stack, standalone_stack) # Now modify both: field = 'a' value = 2 ms.add(field=field, value=value) standalone_stack[-1][field].append(value) print ms print standalone_stack lists_the_same(ms.stack, standalone_stack) )或独立变量[{'a': [], 'b': []}] [{'a': [], 'b': []}] Yes, the same [{'a': [2], 'b': [2]}] [{'a': [2], 'b': []}] No, not the same 的字段时,为什么会出现这种奇怪的行为差异?即使指出Python相关的关键字也会有所帮助,因为我已经有一段时间不能谷歌了。
  • 如果我能让我的问题更清楚。这是我在这里的第一篇文章。
  • 也许我正在考虑这个问题,你可能会以更加恐怖的方式实现这一点。

0 个答案:

没有答案