初学Pythonノート【32】copyとdeepcopy

1993 ワード

【copy】
浅いレプリケーション(shallow copy)は、独立したオブジェクトが単独で存在するわけではありません.彼は、既存のデータブロックに新しいラベルを付けるだけなので、ラベルの1つが変更されると、データブロックが変化し、別のラベルも変化します.これは私たちの普通の意味でのレプリケーションとは違います
 
【deepcopy】
私たちの一般的な意味の複製は深複製(deep copy)であり、複製されたオブジェクトが独立した新しい個体として完全に再複製される.したがって、既存のコピーされたオブジェクトを変更することは、コピーされた新しいオブジェクトに影響を与えません. 
import copy


class MyCopy:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return str(self.value)


foo = MyCopy(7)

a = ["foo", foo]
b = a[:]
c = list(a)
d = copy.copy(a)
e = copy.deepcopy(a)

a.append("abc")
foo.value = 17

print("original: %r
slice: %r
list(): %r
" "copy(): %r
deepcopy(): %r
" % (a, b, c, d, e))