Commits

Ronald Oussoren committed bcf3022

Ensure that copy.copy(someArray) returns a mutable array

We cannot reliably detect if a given instance of NSArray is mutable or not,
therefore always returning an NSMutableArray from copy.copy gives a better
user experience.

Comments (0)

Files changed (2)

pyobjc-core/Lib/objc/_convenience.py

 )
 
 
+def __copy__(self):
+    if hasattr(self, 'mutableCopy'):
+        return self.mutableCopyWithZone_(None)
+    return self.copyWithZone_(None)
 CONVENIENCE_METHODS[b'copyWithZone:'] = (
-    ('__copy__', lambda self: self.copyWithZone_(None)),
+    ('__copy__', __copy__),
 )
 
 # This won't work:

pyobjc-core/PyObjCTest/test_copying.py

         self.assertIsInstance(a, NSMutableArray)
 
         b = copy.copy(a)
-	b.append('d')
         self.assertIsInstance(b, NSMutableArray)
         self.assertEqual(list(a), list(b))
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.