3
class Entry():
    def __init__(self,l=[]):
        self.list = l


a = Entry()
b = Entry()
a.list.extend([1,2])
assert a.list!=b.list   #assert error

使用する場合

a = Entry([])
b = Entry([])
a.list.extend([1,2])
assert a.list!=b.list   #right

上記の 2 つの例の違いは何ですか?

4

3 に答える 3

1

[]デフォルトのパラメータとして使用しないでください。

これを使って:

class Entry():
    def __init__(self,l=list()):
        ...

ここでの問題は、各 Entry インスタンスに同じリストが割り当てられていることです。

したがって、追加は次のようなものです。

lst = []
a = Entry(lst)
b = Entry(lst)

a.list == b.list # lst == lst -> True
于 2013-10-21T14:58:39.233 に答える
1

これは、最初のケースでは、同じリスト オブジェクトを参照するデフォルトの引数 [ ] を渡すためです。

    class Entry():
        def __init__(self,l=[]):
        self.list = l

    a = Entry()
    b = Entry()
    a.list.extend([1,2])
    print a.list, b.list # [1, 2] [1, 2]
    print id(a.list), id(b.list) # 36993344 36993344
于 2013-10-21T15:00:21.437 に答える