blob: 2b67398bccce23a4a7d546ff02e0f25c590bf9ab [file] [log] [blame]
Christian Heimes81ee3ef2008-05-04 22:42:01 +00001
2# The cycle GC collector can be executed when any GC-tracked object is
3# allocated, e.g. during a call to PyList_New(), PyDict_New(), ...
4# Moreover, it can invoke arbitrary Python code via a weakref callback.
5# This means that there are many places in the source where an arbitrary
6# mutation could unexpectedly occur.
7
8# The example below shows list_slice() not expecting the call to
9# PyList_New to mutate the input list. (Of course there are many
10# more examples like this one.)
11
12
13import weakref
14
15class A(object):
16 pass
17
18def callback(x):
19 del lst[:]
20
21
22keepalive = []
23
24for i in range(100):
25 lst = [str(i)]
26 a = A()
27 a.cycle = a
28 keepalive.append(weakref.ref(a, callback))
29 del a
30 while lst:
31 keepalive.append(lst[:])