回答編集履歴

5

追記

2019/09/20 16:01

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -35,3 +35,79 @@
35
35
  ---
36
36
 
37
37
  > 参照渡しや値渡しに関連してくるところでしょうか?
38
+
39
+
40
+
41
+ 簡単な例え話をします。
42
+
43
+
44
+
45
+ 太郎くんは、お母さんからメモを受け取りました。『ドーナツが棚のどこどこにあるわよ』
46
+
47
+
48
+
49
+ 太郎くんは、そのメモをコピーして花子さんに渡し、遊びに出かけました。
50
+
51
+ 花子さんはすぐに戸棚を空けて、ドーナツを食べました。
52
+
53
+
54
+
55
+ **帰って来た太郎くんが戸棚を空けると、ドーナツはありませんでした。なぜ?**
56
+
57
+
58
+
59
+ ......
60
+
61
+ ......
62
+
63
+ ......当然、**『メモをコピーしてもドーナツはコピーされない』から**ですよね。
64
+
65
+
66
+
67
+ ---
68
+
69
+ Pythonはオブジェクトをアドレス(場所)で管理しています。
70
+
71
+ 引数として渡されているのは実はアドレスであって、オブジェクトは共有されているのです。
72
+
73
+
74
+
75
+ アドレスはid関数で確認可能です。
76
+
77
+ ```Python
78
+
79
+ >>> lst1 = [1, 2, 3, 4]
80
+
81
+ >>> lst2 = lst1
82
+
83
+ >>>
84
+
85
+ >>> id(lst1)
86
+
87
+ 2639761168968 # これと、
88
+
89
+ >>> id(lst2)
90
+
91
+ 2639761168968 # これは同じオブジェクト
92
+
93
+ ```
94
+
95
+
96
+
97
+ ```Python
98
+
99
+ >>> lst1 = [1, 2, 3, 4]
100
+
101
+ >>> lst2 = lst1.copy()
102
+
103
+ >>>
104
+
105
+ >>> id(lst1)
106
+
107
+ 2639761520200 # これと、
108
+
109
+ >>> id(lst2)
110
+
111
+ 2639761609544 # これは違うオブジェクト
112
+
113
+ ```

4

追記

2019/09/20 16:01

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -27,3 +27,11 @@
27
27
  sort(li[:])
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ コメントを受けて
34
+
35
+ ---
36
+
37
+ > 参照渡しや値渡しに関連してくるところでしょうか?

3

追記

2019/09/20 15:51

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -10,7 +10,17 @@
10
10
 
11
11
  ---
12
12
 
13
- スライスを使って、浅いコピーを取って渡すと良いでしょう。
13
+ 浅いコピーを取って渡すと良いでしょう。
14
+
15
+ ```Python
16
+
17
+ sort(li.copy())
18
+
19
+ ```
20
+
21
+
22
+
23
+ スライスを使うと簡潔に書けます。
14
24
 
15
25
  ```Python
16
26
 

2

修正

2019/09/20 13:35

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  グローバル変数であるかどうかは関係ありません。
6
6
 
7
- [なぜ list 'y' を変更すると list 'x' も変更されるのですか? - プログラミング FAQ — Python 3.7.4 ドキュメント](https://docs.python.org/ja/3/faq/programming.html#why-did-changing-list-y-also-change-list-x)
7
+ [なぜ list 'y' を変更すると list 'x' も変更されるのですか? — Python 3.7.4 ドキュメント](https://docs.python.org/ja/3/faq/programming.html#why-did-changing-list-y-also-change-list-x)
8
8
 
9
9
 
10
10
 

1

追記

2019/09/20 13:33

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  グローバル変数であるかどうかは関係ありません。
6
+
7
+ [なぜ list 'y' を変更すると list 'x' も変更されるのですか? - プログラミング FAQ — Python 3.7.4 ドキュメント](https://docs.python.org/ja/3/faq/programming.html#why-did-changing-list-y-also-change-list-x)
6
8
 
7
9
 
8
10