为什么我的python3类实例没有获得对其成员的新引用?

时间:2019-10-11 19:45:46

标签: python-3.x reference

我在Python3类中遇到了这种特别令人毛骨悚然的行为,由于奇怪的原因,这导致我的测试失败。我已经将代码简化为一个更不可知的示例。

class MyClass:
    def __init__(self, d={}, l=[]):
        self.d = d
        self.l = l

    def addEntry(self, line):
        """ Line is a space separated list of words. Should be at least 3 long.
        """
        entry = line.split()
        self.l.append(entry[0])
        self.d[entry[1]] = entry[2]

# my unit-tests
def test_one(self):
    mc = MyClass()
    mc.addEntry('hello line one')

def test_two(self):
    mc = MyClass()
    self.assertEqual(0, len(mc.l))

test_two失败是因为0 != 1,这意味着test_two中的MyClass实例包含一个长度为1的列表。

我可以通过以下方式修复MyClass来纠正此问题。

class MyClass:
   def __init__(self, d={}, l=[]):
       self.d = dict(d)
       self.l = list(l)

为什么MyClass的新实例似乎共享对其内部成员的引用?

0 个答案:

没有答案