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

回答編集履歴

2

修正

2018/06/01 12:09

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -7,37 +7,46 @@
7
7
  実際にidを確認してみると良いです。
8
8
  ```Python
9
9
  a = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
10
+ a[1][1] = 1
11
+
10
12
  for e in a:
11
- print(id(e))
13
+ print(f'{id(e)}: {e}')
12
14
 
13
- print()
15
+ print('-'*42)
14
16
 
15
17
  #
16
18
  #
17
19
  b = [[0] * 3] * 3
20
+ b[1][1] = 1
21
+
18
22
  for e in b:
19
- print(id(e))
23
+ print(f'{id(e)}: {e}')
20
24
 
21
- print()
25
+ print('-'*42)
22
26
 
23
27
  #
24
28
  #
25
29
  c = [[0] * 3 for _ in range(3)]
30
+ c[1][1] = 1
31
+
26
32
  for e in c:
27
- print(id(e))
33
+ print(f'{id(e)}: {e}')
34
+
35
+ print('-'*42)
28
36
  ```
29
37
 
30
- **実行結果** [Wandbox](https://wandbox.org/permlink/xdcNb06JtTjRN3AI)
38
+ **実行結果** [Wandbox](https://wandbox.org/permlink/HEZpkk81o8qx6UYW)
31
39
  ```
32
- 139752138114696
40
+ 139895659521672: [0, 0, 0]
33
- 139752138114888
34
- 139752138115208
41
+ 139895659521864: [0, 1, 0]
35
-
36
- 139752138115336
37
- 139752138115336
38
- 139752138115336
39
-
40
- 139752138116296
41
- 139752138116360
42
+ 139895659522184: [0, 0, 0]
43
+ ------------------------------------------
42
- 139752138116424
44
+ 139895659523656: [0, 1, 0]
45
+ 139895659523656: [0, 1, 0]
46
+ 139895659523656: [0, 1, 0]
47
+ ------------------------------------------
48
+ 139895659523976: [0, 0, 0]
49
+ 139895659524040: [0, 1, 0]
50
+ 139895659544648: [0, 0, 0]
51
+ ------------------------------------------
43
52
  ```

1

追記

2018/06/01 12:09

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,4 +1,43 @@
1
1
  後者は、リストの参照値が共有されてしまうからです。
2
2
  [Qiita - pythonでのリストの要素の変更とリストのコピー](https://qiita.com/masarin1126/items/a0afa4a5fecacdd02be9)
3
3
 
4
- 良く躓くポイントなので、調べれば同様の話題はたくさん出てきます。
4
+ 良く躓くポイントなので、調べれば同様の話題はたくさん出てきます。
5
+
6
+ ---
7
+ 実際にidを確認してみると良いです。
8
+ ```Python
9
+ a = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
10
+ for e in a:
11
+ print(id(e))
12
+
13
+ print()
14
+
15
+ #
16
+ #
17
+ b = [[0] * 3] * 3
18
+ for e in b:
19
+ print(id(e))
20
+
21
+ print()
22
+
23
+ #
24
+ #
25
+ c = [[0] * 3 for _ in range(3)]
26
+ for e in c:
27
+ print(id(e))
28
+ ```
29
+
30
+ **実行結果** [Wandbox](https://wandbox.org/permlink/xdcNb06JtTjRN3AI)
31
+ ```
32
+ 139752138114696
33
+ 139752138114888
34
+ 139752138115208
35
+
36
+ 139752138115336
37
+ 139752138115336
38
+ 139752138115336
39
+
40
+ 139752138116296
41
+ 139752138116360
42
+ 139752138116424
43
+ ```