summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/memoryview_gc.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-10-26 13:20:50 +0000
committerDamien George <damien.p.george@gmail.com>2014-10-26 13:20:50 +0000
commitde3c806965f907981d5cb5d49fc139845cd94aba (patch)
tree8fcf9dc7695295c6a5cc3d530d28ca27586a6a36 /tests/basics/memoryview_gc.py
parentc76af32575b0a897b4fdbb7b9c2d0754a8df5399 (diff)
downloadmicropython-de3c806965f907981d5cb5d49fc139845cd94aba.tar.gz
micropython-de3c806965f907981d5cb5d49fc139845cd94aba.zip
py: Fix memoryview referencing so it retains ptr to original buffer.
This way, if original parent object is GC'd, the memoryview still points to the underlying buffer data so that buffer is not GC'd.
Diffstat (limited to 'tests/basics/memoryview_gc.py')
-rw-r--r--tests/basics/memoryview_gc.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/basics/memoryview_gc.py b/tests/basics/memoryview_gc.py
new file mode 100644
index 0000000000..a1e4baad47
--- /dev/null
+++ b/tests/basics/memoryview_gc.py
@@ -0,0 +1,18 @@
+# test memoryview retains pointer to original object/buffer
+
+b = bytearray(10)
+m = memoryview(b)[1:]
+for i in range(len(m)):
+ m[i] = i
+
+# reclaim b, but hopefully not the buffer
+b = None
+import gc
+gc.collect()
+
+# allocate lots of memory
+for i in range(100000):
+ [42, 42, 42, 42]
+
+# check that the memoryview is still what we want
+print(list(m))