Code Sample, a copy-pastable example if possible

arr = np.arange(10)
arr.setflags(write=False)
ser = pd.Series(arr, index=arr)
print ser.unique()

...

  File "/usr/local/lib/python2.7/dist-packages/pandas/core/algorithms.py", line 364, in unique
    uniques = table.unique(values)
  File "pandas/_libs/hashtable_class_helper.pxi", line 973, in pandas._libs.hashtable.Int64HashTable.unique
  File "stringsource", line 646, in View.MemoryView.memoryview_cwrapper
  File "stringsource", line 347, in View.MemoryView.memoryview.__cinit__
ValueError: buffer source array is read-only

Problem description

For no good reason, unique tries to modify the input and fails if the input data is read only.

Perhaps should simply delegate to np.unique which does not modify the input.

Expected Output

Operation should not modify the input. Is rude to the caller and will doubtless lead to inexplicable concurrency issues.

Output of pd.show_versions()

INSTALLED VERSIONS ------------------ commit: None python: 2.7.6.final.0 python-bits: 64 OS: Linux OS-release: 3.13.0-24-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: None.None pandas: 0.22.0 pytest: None pip: 9.0.1 setuptools: 36.0.1 Cython: 0.27.3 numpy: 1.13.3 scipy: 1.0.0 pyarrow: None xarray: None IPython: 5.3.0 sphinx: None patsy: 0.2.1 dateutil: 2.6.1 pytz: 2017.2 blosc: None bottleneck: None tables: 3.1.1 numexpr: 2.6.2 feather: None matplotlib: 2.0.2 openpyxl: 1.7.0 xlrd: 0.9.2 xlwt: 0.7.5 xlsxwriter: None lxml: None bs4: None html5lib: 0.999999999 sqlalchemy: 1.0.15 pymysql: None psycopg2: 2.7.3.2 (dt dec pq3 ext lo64) jinja2: 2.9.6 s3fs: None fastparquet: None pandas_gbq: None pandas_datareader: None

Comment From: jschendel

This works on master for me, and I suspect it was fixed by #18825

In [2]: arr = np.arange(10)

In [3]: arr.setflags(write=False)

In [4]: ser = pd.Series(arr, index=arr)

In [5]: ser.unique()
Out[5]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)

In [6]: pd.__version__
Out[6]: '0.23.0.dev0+98.g8acdf80'

Comment From: jreback

yep this is in 0.23.0

Comment From: jreback

@stuz5000 note that this is actually a bug in cython which pandas works around

Comment From: gabomgp

I'll put this here, delete if is inappropiate. But, the question is related with this bug:

https://stackoverflow.com/questions/49619588/how-to-prevent-bug-https-github-com-pandas-dev-pandas-issues-19195-with-dese