質問するログイン新規登録

回答編集履歴

1

詳細な説明追加

2015/12/04 03:54

投稿

hiro-k
hiro-k

スコア902

answer CHANGED
@@ -1,1 +1,43 @@
1
- A.append(A[-1]) の代わりに、 A.append(list(A[-1])) とすれば望みの動作になりますよ。
1
+ A.append(A[-1]) の代わりに、 A.append(list(A[-1])) とすれば望みの動作になりますよ。
2
+
3
+ --追記--
4
+
5
+ ```python
6
+ a=[1,1,1]
7
+ b=a
8
+ a[2]=5
9
+ print a,b
10
+ ```
11
+ とすると、[1,1,5] [1,1,5] と表示されるかと思います。一方
12
+ ```python
13
+ c=[1,1,1]
14
+ d=[1,1,1]
15
+ c[2]=5
16
+ print c,d
17
+ ```
18
+ なら [1,1,5] [1,1,1] になるはずです。
19
+ ```python
20
+ e=[1,1,1]
21
+ f=list(e)
22
+ c[2]=5
23
+ print e,f
24
+ ```
25
+ も [1,1,5] [1,1,1] になるはずです。
26
+ 上記例では a と b には同じ実体のリストが入っているのに対して
27
+ cとd には別のリスト(ただし内容は同じ)が入っているということです。
28
+ list(e) というのは内容が同じだけど別実体のリストを新たに作ることになるため、
29
+ c,d と e,f は同じ結果になります。
30
+
31
+ 提示された例を少し書き換えてみます。
32
+ ```python
33
+ a = [1,1,1]
34
+ A = [ a ]
35
+ A.append(A[-1]) #直前の要素をコピー。
36
+ A[-1][2] = 5 #コピーしてできた要素を一部書き換える。コピー元要素は書き換わってほしくない。
37
+ a[1]=3
38
+ print A
39
+ ```
40
+ とすると、 [[1,3,5],[1,3,5]]と表示されるかと 思います。
41
+
42
+ つまり、この例では、a も A[0] も後から追加した A[1] も同じ一つの実体のリストを指しているということです。
43
+