Skip to content

Commit e094042

Browse files
committed
API: define __copy__ for NDFrame (pandas-dev#8571)
1 parent 9e73c71 commit e094042

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

pandas/core/generic.py

+5
Original file line numberDiff line numberDiff line change
@@ -3015,6 +3015,11 @@ def copy(self, deep=True):
30153015
data = self._data.copy(deep=deep)
30163016
return self._constructor(data).__finalize__(self)
30173017

3018+
# Defining these special function ensures that ``copy.copy(ndframe)`` behaves
3019+
# the same as ``ndframe.copy``.
3020+
# https://github.com/pydata/pandas/issues/8571
3021+
__copy__ = copy
3022+
30183023
def _convert(self, datetime=False, numeric=False, timedelta=False,
30193024
coerce=False, copy=True):
30203025
"""

pandas/tests/frame/test_misc_api.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from __future__ import print_function
44
# pylint: disable-msg=W0612,E1101
5-
from copy import deepcopy
65
import sys
6+
import copy
77
import nose
88
from distutils.version import LooseVersion
99

@@ -330,7 +330,14 @@ def test_values(self):
330330
self.assertTrue((self.frame.values[:, 0] == 5).all())
331331

332332
def test_deepcopy(self):
333-
cp = deepcopy(self.frame)
333+
cp = copy.deepcopy(self.frame)
334+
series = cp['A']
335+
series[:] = 10
336+
for idx, value in compat.iteritems(series):
337+
self.assertNotEqual(self.frame['A'][idx], value)
338+
339+
def test_copy_dot_copy(self):
340+
cp = copy.copy(self.frame)
334341
series = cp['A']
335342
series[:] = 10
336343
for idx, value in compat.iteritems(series):

pandas/tests/series/test_misc_api.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# coding=utf-8
22
# pylint: disable-msg=E1101,W0612
33

4+
import copy
45
import numpy as np
56
import pandas as pd
67

@@ -40,6 +41,11 @@ def test_copy_index_name_checking(self):
4041
printing.pprint_thing(self.ts.index.name)
4142
self.assertIsNone(self.ts.index.name)
4243

44+
def test_copy_dot_copy(self):
45+
cp = copy.copy(self.ts)
46+
cp[0] += 1.
47+
self.assertNotEqual(cp[0], self.ts[0])
48+
4349
def test_append_preserve_name(self):
4450
result = self.ts[:5].append(self.ts[5:])
4551
self.assertEqual(result.name, self.ts.name)

0 commit comments

Comments
 (0)