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

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

     [ https://issues.apache.org/jira/browse/ARROW-3228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Wes McKinney reassigned ARROW-3228:
-----------------------------------

    Assignee: Wes McKinney

> [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
>            Assignee: Wes McKinney
>            Priority: Major
>             Fix For: 0.11.0
>
>
> 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)