# Program received signal SIGSEGV, Segmentation fault. # 0x080f27b2 in PyObject_Hash (v=) at Objects/object.c:746 # 746 if (tp->tp_hash != NULL) # (gdb) bt # #0 0x080f27b2 in PyObject_Hash (v=) at Objects/object.c:746 # #1 0x080e1717 in PyDict_SetItem (op={}, key=, value=None) at Objects/dictobject.c:1201 # #2 0x0810e8a0 in _PyObject_GetState (obj=) at Objects/typeobject.c:3657 # #3 0x081100e9 in reduce_2 (obj=) at Objects/typeobject.c:3949 # #4 0x08110551 in _common_reduce (self=, proto=2) at Objects/typeobject.c:4012 # #5 0x08110641 in object_reduce (self=, args=(2,)) at Objects/typeobject.c:4032 # # (gdb) frame 2 # #2 0x0810e8a0 in _PyObject_GetState (obj=) at Objects/typeobject.c:3657 # 3657 int err = PyDict_SetItem(slots, name, value); # (gdb) print *name # $1 = {_ob_next = 0xdbdbdbdb, _ob_prev = 0xdbdbdbdb, ob_refcnt = -606348325, ob_type = 0xdbdbdbdb} # # "name" is freed inside __getattr__ and is later used by PyDict_SetItem. class X(type("x")): pass class Y: __slotnames__ = [X() for i in range(2)] def __getattr__(self, attr): print("__getattr__") if attr=="__getstate__": raise AttributeError L = type(self).__slotnames__ n = len(L) for i in range(n): del L[0] L.append(i) y = Y() y.__reduce__(2)