summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-04-29 08:47:48 +0200
committerGitHub <noreply@github.com>2021-04-29 08:47:48 +0200
commitc6ad03fddf4b04c60dca4327140e59fb2dcca8e5 (patch)
treee09e51c5cc1d030a83f4b528395875d0ad3631d3
parent5daf70b22e72ea1a88c05975f69120b8c4e4927f (diff)
downloadcpython-git-c6ad03fddf4b04c60dca4327140e59fb2dcca8e5.tar.gz
bpo-43908: Make array.array type immutable (GH-25696)
Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r--Lib/test/test_array.py6
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst2
-rw-r--r--Modules/arraymodule.c3
3 files changed, 10 insertions, 1 deletions
diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py
index bdcd1254b3..11184add6d 100644
--- a/Lib/test/test_array.py
+++ b/Lib/test/test_array.py
@@ -40,6 +40,12 @@ class MiscTest(unittest.TestCase):
self.assertRaises(TypeError, array.array, 'xx')
self.assertRaises(ValueError, array.array, 'x')
+ @support.cpython_only
+ def test_immutable(self):
+ # bpo-43908: check that array.array is immutable
+ with self.assertRaises(TypeError):
+ array.array.foo = 1
+
def test_empty(self):
# Exercise code for handling zero-length arrays
a = array.array('B')
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst
new file mode 100644
index 0000000000..07303b99d1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst
@@ -0,0 +1,2 @@
+Make the :class:`array.array` type immutable. Patch by
+Erlend E. Aasland.
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index f532678952..367621fd03 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -2847,7 +2847,8 @@ static PyType_Slot array_slots[] = {
static PyType_Spec array_spec = {
.name = "array.array",
.basicsize = sizeof(arrayobject),
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
+ Py_TPFLAGS_IMMUTABLETYPE),
.slots = array_slots,
};