python : listコピー :

shallow copy
hdknr@debiansept:~/openidtx/samples/pytx$ python2.5
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x=[1,2,3]
>>> y=x
>>> y
[1, 2, 3]
>>> x[2]=999
>>> x
[1, 2, 999]
>>> y
[1, 2, 999]
 
deep copy
>>> y = [ i for i in  x]
>>> y
[1, 2, 999]
>>> x
[1, 2, 999]
>>> x[2]=3
>>> x
[1, 2, 3]
>>> y
[1, 2, 999]
 
要素はdeepコピーしているけれども、オブジェクトの実態は共有
>>> class myclass():
...   def __init__(self,val):
...      self.v=val
...
>>> x = [ myclass(1),myclass(2),myclass(3)]
>>> y = [ i for i in x]
>>> [ i.v for i in x ]
[1, 2, 3]
>>> [ i.v for i in y ]
[1, 2, 3]
>>> x[2].v = 999
>>> [ i.v for i in x ]
[1, 2, 999]
>>> [ i.v for i in y ]
[1, 2, 999
 
コピーコンストラクタを使った実体を作り直す
>>> z=[ myclass(i.v) for i in x ]
>>> [ i.v for i in x ]
[1, 2, 999]
>>> x[2].v=321
>>> [ i.v for i in x ]
[1, 2, 321]
>>> [ i.v for i in z ]
[1, 2, 999]
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中