回答編集履歴

1

質問の修正を受けて回答を変更

2020/07/23 09:44

投稿

hope_mucci
hope_mucci

スコア4447

test CHANGED
@@ -1 +1,67 @@
1
+ ### まず前提
2
+
1
3
  `append`はその配列の末尾に引数のデータを追加します。
4
+
5
+ input_listの末尾に追加されます。
6
+
7
+
8
+
9
+ ### arrとinput_listが同一になる理由
10
+
11
+
12
+
13
+ 結論から言うと、**arrとinput_listが同じオブジェクトを指している**からです。
14
+
15
+ pythonでは変数は全て「オブジェクトの参照」を指しています。
16
+
17
+ `arr = input_list`のコードは、arrにinput_listの参照を代入しているだけで、input_listの中身を複製してarrにセットしているわけではありません。
18
+
19
+
20
+
21
+ ```python
22
+
23
+ input_line=['A', 'Z', 'B', 'C']
24
+
25
+ arr=input_line
26
+
27
+ print('arr:',id(arr))
28
+
29
+ print('input_line:',id(input_line))
30
+
31
+ input_line.append('a')
32
+
33
+ print(arr)
34
+
35
+ print(input_line)
36
+
37
+ ```
38
+
39
+ を実行すると、arrとinput_lineのid(オブジェクト固有番号)が同一であることが確認できます。
40
+
41
+
42
+
43
+ ```python
44
+
45
+ input_line=['A', 'Z', 'B', 'C']
46
+
47
+ arr=input_line.copy() # <- arrにinput_line.copy()関数の結果を代入
48
+
49
+ print('arr:',id(arr))
50
+
51
+ print('input_line:',id(input_line))
52
+
53
+ input_line.append('a')
54
+
55
+ print(arr)
56
+
57
+ print(input_line)
58
+
59
+ ```
60
+
61
+
62
+
63
+ 上記のようなコードを実行すると、arrとinput_lineの中身は別々になります。
64
+
65
+ `input_line.copy()`は、リストの中身を新しいリストコピーし、その新しいidを返す関数です。
66
+
67
+ そのため、arrとinput_lineは別々のリストになります。