>>> class Chara:
def __init__(self,s):
self.name = s
#とりあえず、前回と同じクラスを使う。
>>> cl = [Chara('Haruhi')]
>>> cl += [Chara('Mikuru')] #cl = cl + [Chara('Mikuru')]でもいい。
>>> cl
[<__main__.Chara instance at 0x00DB9D78>, <__main__.Chara instance at 0x00DB9DC8>]
#いうまでもなく、cl[0]とcl[1]は別のインスタンスなので、別々のアドレスに格納されている。とりあえず、年齢でも設定しておこう。
>>> cl[1].age = 17
#さて、もう1つself.name='Mikuru'なインスタンスが欲しい。
>>> cl += cl[1]
Traceback (most recent call last):
File "", line 1, in
cl += cl[1]
TypeError: iteration over non-sequence
#↑初歩的な間違い。
>>> cl += [cl[1]]
>>> cl
[<__main__.Chara instance at 0x00DB9D78>,
<__main__.Chara instance at 0x00DB9DC8>,
<__main__.Chara instance at 0x00DB9DC8>]
#読みやすくするために、折り返しを入れた。#clにcl[1]をもう1つ加えたが、cl[1]とcl[2]は同じアドレスに入っている。
>>> cl[2].age = '(Confidential)'
>>> cl[1].age
'(Confidential)'
#当然だが、cl[2].ageを「(Confidential)」にしたため、cl[1].ageもそうなってしまった。
#(俺たちに必要なのは、全く同一の2人の みくる じゃない。みくるとそのコピーなのだ。)
>>> cl[1].age = 17 #cl[1]のageを元に戻した。
>>> import copy #copyモジュールをインポートする。
>>> cl[2] = copy.copy(cl[1]) #cl[2]にcl[1]のコピーを入れる。
>>> cl
[<__main__.Chara instance at 0x00DB9D78>,
<__main__.Chara instance at 0x00DB9DC8>,
<__main__.Chara instance at 0x00DC3C60>]
#今度はcl[1]とcl[2]のアドレスが違うものになっている。
#これで、cl[2].ageを書き換えても、cl[1].ageは変わらないはず。
>>> cl[2].age = '(Confidential)'
>>> cl[1].age
17