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

回答編集履歴

5

追記

2019/09/20 16:01

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -16,4 +16,42 @@
16
16
 
17
17
  コメントを受けて
18
18
  ---
19
- > 参照渡しや値渡しに関連してくるところでしょうか?
19
+ > 参照渡しや値渡しに関連してくるところでしょうか?
20
+
21
+ 簡単な例え話をします。
22
+
23
+ 太郎くんは、お母さんからメモを受け取りました。『ドーナツが棚のどこどこにあるわよ』
24
+
25
+ 太郎くんは、そのメモをコピーして花子さんに渡し、遊びに出かけました。
26
+ 花子さんはすぐに戸棚を空けて、ドーナツを食べました。
27
+
28
+ **帰って来た太郎くんが戸棚を空けると、ドーナツはありませんでした。なぜ?**
29
+
30
+ ......
31
+ ......
32
+ ......当然、**『メモをコピーしてもドーナツはコピーされない』から**ですよね。
33
+
34
+ ---
35
+ Pythonはオブジェクトをアドレス(場所)で管理しています。
36
+ 引数として渡されているのは実はアドレスであって、オブジェクトは共有されているのです。
37
+
38
+ アドレスはid関数で確認可能です。
39
+ ```Python
40
+ >>> lst1 = [1, 2, 3, 4]
41
+ >>> lst2 = lst1
42
+ >>>
43
+ >>> id(lst1)
44
+ 2639761168968 # これと、
45
+ >>> id(lst2)
46
+ 2639761168968 # これは同じオブジェクト
47
+ ```
48
+
49
+ ```Python
50
+ >>> lst1 = [1, 2, 3, 4]
51
+ >>> lst2 = lst1.copy()
52
+ >>>
53
+ >>> id(lst1)
54
+ 2639761520200 # これと、
55
+ >>> id(lst2)
56
+ 2639761609544 # これは違うオブジェクト
57
+ ```

4

追記

2019/09/20 16:01

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -12,4 +12,8 @@
12
12
  スライスを使うと簡潔に書けます。
13
13
  ```Python
14
14
  sort(li[:])
15
- ```
15
+ ```
16
+
17
+ コメントを受けて
18
+ ---
19
+ > 参照渡しや値渡しに関連してくるところでしょうか?

3

追記

2019/09/20 15:51

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -4,7 +4,12 @@
4
4
  [なぜ 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)
5
5
 
6
6
  ---
7
- スライスを使って、浅いコピーを取って渡すと良いでしょう。
7
+ 浅いコピーを取って渡すと良いでしょう。
8
8
  ```Python
9
+ sort(li.copy())
10
+ ```
11
+
12
+ スライスを使うと簡潔に書けます。
13
+ ```Python
9
14
  sort(li[:])
10
15
  ```

2

修正

2019/09/20 13:35

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > liはグローバル変数なので変わらないと思った
2
2
 
3
3
  グローバル変数であるかどうかは関係ありません。
4
- [なぜ 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)
4
+ [なぜ 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)
5
5
 
6
6
  ---
7
7
  スライスを使って、浅いコピーを取って渡すと良いでしょう。

1

追記

2019/09/20 13:33

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  > liはグローバル変数なので変わらないと思った
2
2
 
3
3
  グローバル変数であるかどうかは関係ありません。
4
+ [なぜ 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)
4
5
 
5
6
  ---
6
7
  スライスを使って、浅いコピーを取って渡すと良いでしょう。