]> granicus.if.org Git - python/commitdiff
SF bug #910986: copy.copy fails for array.array
authorRaymond Hettinger <python@rcn.com>
Sat, 13 Mar 2004 18:18:51 +0000 (18:18 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 13 Mar 2004 18:18:51 +0000 (18:18 +0000)
Added support for the copy module.

Lib/test/test_array.py
Misc/NEWS
Modules/arraymodule.c

index 0331280da624626a367acaa462400fce65a241c9..c9b05c2879f65a7f8fc9cef3ad2468dbffce4160 100755 (executable)
@@ -73,6 +73,13 @@ class BaseTest(unittest.TestCase):
             b.byteswap()
             self.assertEqual(a, b)
 
+    def test_copy(self):
+        import copy
+        a = array.array(self.typecode, self.example)
+        b = copy.copy(a)
+        self.assertNotEqual(id(a), id(b))
+        self.assertEqual(a, b)
+
     def test_insert(self):
         a = array.array(self.typecode, self.example)
         a.insert(0, self.example[0])
index 9c5d80ac596076b7012d239b6221623a13446f81..350bf7e776e4a372f8899d62c7b66bf2f48e0435 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -180,6 +180,8 @@ Core and builtins
 Extension modules
 -----------------
 
+- array objects now support the copy module
+
 - cStringIO.writelines() now accepts any iterable argument and writes
   the lines one at a time rather than joining them and writing once.
   Made a parallel change to StringIO.writelines().  Saves memory and
index 938292734b52f15ec4718e2655d7e47cea01edf7..bda5fefef3b3c5feeedca2aa43410fb1bd85d75f 100644 (file)
@@ -616,6 +616,17 @@ array_slice(arrayobject *a, int ilow, int ihigh)
        return (PyObject *)np;
 }
 
+static PyObject *
+array_copy(arrayobject *a, PyObject *unused)
+{
+       return array_slice(a, 0, a->ob_size);
+}
+
+PyDoc_STRVAR(copy_doc,
+"copy(array)\n\
+\n\
+ Return a copy of the array.");
+
 static PyObject *
 array_concat(arrayobject *a, PyObject *bb)
 {
@@ -1409,8 +1420,12 @@ PyMethodDef array_methods[] = {
         buffer_info_doc},
        {"byteswap",    (PyCFunction)array_byteswap,    METH_NOARGS,
         byteswap_doc},
+       {"__copy__",    (PyCFunction)array_copy,        METH_NOARGS,
+        copy_doc},
        {"count",       (PyCFunction)array_count,       METH_O,
         count_doc},
+       {"__deepcopy__",(PyCFunction)array_copy,        METH_NOARGS,
+        copy_doc},
        {"extend",      (PyCFunction)array_extend,      METH_O,
         extend_doc},
        {"fromfile",    (PyCFunction)array_fromfile,    METH_VARARGS,