You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Pearu Peterson (JIRA)" <ji...@apache.org> on 2018/09/12 20:34:00 UTC

[jira] [Created] (ARROW-3228) [Python] Immutability of bytes is ignored

Pearu Peterson created ARROW-3228:
-------------------------------------

             Summary: [Python] Immutability of bytes is ignored
                 Key: ARROW-3228
                 URL: https://issues.apache.org/jira/browse/ARROW-3228
             Project: Apache Arrow
          Issue Type: Bug
          Components: Python
            Reporter: Pearu Peterson


Creating a pyarrow.Buffer from Python bytes allows in-place changes of immutable Python strings:
{code:java}
>>> import pyarrow as pa
>>> import numpy as np
>>> a = b'123456'
>>> a[0] = 77 # bytes are immutable, so TypeError is expected
TypeError: 'bytes' object does not support item assignment
>>> b = pa.py_buffer(a)  # but with pyarrow bytes can be changed in-place
>>> arr = np.frombuffer(b, dtype=np.uint8)
>>> arr[0] = 66 # change 'a' in-place, would expect error
>>> a
b'B23456'
>>> hash(a)
-4581532003987476523
>>> arr[0] = 77
>>> a
b'M23456'
>>> hash(a) # hash value stays constant while changing 'a'
-4581532003987476523{code}
{{Notice that numpy.frombuffer respects immutability of bytes:}}
{{}}
{code:java}
>>> arr2 = np.frombuffer(a, dtype=np.uint8)
>>> arr2
array([77, 50, 51, 52, 53, 54], dtype=uint8)
>>> arr2[0] = 88 # expecting error
ValueError: assignment destination is read-only{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)