回答編集履歴

7

修正

2020/10/11 13:34

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  ####**数値の場合**
100
100
 
101
- そもそも**参照先を直接書き換える方法が存在しません**。
101
+ Pythonの数値はイミュータブルなので、**直接書き換える方法が存在しません**。
102
102
 
103
103
  これはオブジェクトの保持の仕方とは全く関係ありません。
104
104
 

6

成形

2020/10/11 13:34

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -2,12 +2,54 @@
2
2
 
3
3
 
4
4
 
5
- Pythonに参照渡しは存在しません。常に同じように動作します。
5
+ **Pythonに参照渡しは存在しません**
6
+
7
+
8
+
9
+ - [なぜ、Java等で「参照渡し」の言葉を使うべきではないのか? - Qiita](https://qiita.com/raccy/items/59a6ac6c818918dd9651)
10
+
11
+ - [プログラミング FAQ — ドキュメント出力引数のある関数 (参照渡し) はどのように書きますか?](https://docs.python.org/ja/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference)
12
+
13
+ > 前提として、Python では引数は代入によって渡されます。代入はオブジェクトへの参照を作るだけなので、呼び出し元と呼び出し先にある引数名の間にエイリアスはありませんし、参照渡しそれ自体はありません。
14
+
15
+
16
+
17
+ また、そもそも代入を○○渡しと呼ぶこともありません。
18
+
19
+
20
+
21
+ ---
6
22
 
7
23
  変数への代入が、他の変数に影響することはありません。
8
24
 
25
+
26
+
27
+ ####**リストの場合**
28
+
9
29
  ```Python
10
30
 
31
+ >>> a = [1]
32
+
33
+ >>> b = a
34
+
35
+ >>> print(a, b)
36
+
37
+ [1] [1]
38
+
39
+ >>> a = [2]
40
+
41
+ >>> print(a, b)
42
+
43
+ [2] [1]
44
+
45
+ ```
46
+
47
+
48
+
49
+ ####**数値の場合**
50
+
51
+ ```Python
52
+
11
53
  >>> a = 1
12
54
 
13
55
  >>> b = a
@@ -26,6 +68,14 @@
26
68
 
27
69
 
28
70
 
71
+ ---
72
+
73
+ 変数の参照先への操作は、同じオブジェクトを参照している他の変数にも影響します。
74
+
75
+
76
+
77
+ ####**リストの場合**
78
+
29
79
  ```Python
30
80
 
31
81
  >>> a = [1]
@@ -36,28 +86,6 @@
36
86
 
37
87
  [1] [1]
38
88
 
39
- >>> a = [2]
40
-
41
- >>> print(a, b)
42
-
43
- [2] [1]
44
-
45
- ```
46
-
47
-
48
-
49
- 変数の参照先への操作は、同じオブジェクトを参照している他の変数にも影響します。
50
-
51
- ```Python
52
-
53
- >>> a = [1]
54
-
55
- >>> b = a
56
-
57
- >>> print(a, b)
58
-
59
- [1] [1]
60
-
61
89
  >>> a.append(2)
62
90
 
63
91
  >>> print(a, b)
@@ -68,7 +96,9 @@
68
96
 
69
97
 
70
98
 
99
+ ####**数値の場合**
100
+
71
- 数値型の場合、そもそも**参照先を直接書き換える方法が存在しません**。
101
+ そもそも**参照先を直接書き換える方法が存在しません**。
72
102
 
73
103
  これはオブジェクトの保持の仕方とは全く関係ありません。
74
104
 

5

追記

2020/10/11 13:32

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -161,3 +161,13 @@
161
161
  print "\n";
162
162
 
163
163
  ```
164
+
165
+
166
+
167
+ JavaScriptはあまり詳しくないですし、
168
+
169
+ Perlに至ってはさっきまでHello Worldすら書いたことがありませんでした。
170
+
171
+
172
+
173
+ 変な間違いをしていたらすみません。

4

追記

2020/10/11 12:45

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -74,13 +74,15 @@
74
74
 
75
75
 
76
76
 
77
+ 他の言語では?
78
+
77
79
  ---
78
80
 
79
81
  > 参照渡しになったり実値渡しになったりする言語は初めてでかなり戸惑っています。
80
82
 
81
83
 
82
84
 
83
- 過去質問を見る限りご経験があるようですが、JavaScriptも同じように動作るかと
85
+ 過去質問を見る限り、JavaScriptとPerlのご経験があるよう
84
86
 
85
87
  ```JavaScript
86
88
 
@@ -119,3 +121,43 @@
119
121
  console.log();
120
122
 
121
123
  ```
124
+
125
+
126
+
127
+ ```Perl
128
+
129
+ $x = [1, 2];
130
+
131
+ $a = $x;
132
+
133
+ $b = $x;
134
+
135
+ $x = [1, 2, 1];
136
+
137
+ print "@$a\n"; # 1 2
138
+
139
+ print "@$b\n"; # 1 2
140
+
141
+ print "@$x\n"; # 1 2 1
142
+
143
+ print "\n";
144
+
145
+
146
+
147
+ $x = [1, 2];
148
+
149
+ $a = $x;
150
+
151
+ $b = $x;
152
+
153
+ push @$x, 1;
154
+
155
+ print "@$a\n"; # 1 2 1
156
+
157
+ print "@$b\n"; # 1 2 1
158
+
159
+ print "@$x\n"; # 1 2 1
160
+
161
+ print "\n";
162
+
163
+ ```

3

追記

2020/10/11 12:44

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -3,10 +3,6 @@
3
3
 
4
4
 
5
5
  Pythonに参照渡しは存在しません。常に同じように動作します。
6
-
7
-
8
-
9
- ---
10
6
 
11
7
  変数への代入が、他の変数に影響することはありません。
12
8
 
@@ -84,9 +80,7 @@
84
80
 
85
81
 
86
82
 
87
- JavaScriptも同じように動作するかと。
83
+ 過去質問を見る限りご経験があるようですが、JavaScriptも同じように動作するかと。
88
-
89
-
90
84
 
91
85
  ```JavaScript
92
86
 

2

例の差し替え

2020/10/11 12:31

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -90,36 +90,38 @@
90
90
 
91
91
  ```JavaScript
92
92
 
93
- {
93
+ var x = [1,2];
94
94
 
95
- var a = [1];
95
+ var a = x;
96
96
 
97
- var b = a;
97
+ var b = x;
98
98
 
99
- console.log(a + ' ' + b); // 1 1
99
+ var x = [1,2,1];
100
100
 
101
-
101
+ console.log(a); // [ 1, 2 ]
102
102
 
103
- var a = [2];
103
+ console.log(b); // [ 1, 2 ]
104
104
 
105
- console.log(a + ' ' + b); // 2 1
105
+ console.log(x); // [ 1, 2, 1 ]
106
106
 
107
- }
108
-
109
- {
110
-
111
- var a = [3, 4];
107
+ console.log();
112
-
113
- var b = a;
114
-
115
- console.log(a + ' ' + b); // 3,4 3,4
116
108
 
117
109
 
118
110
 
119
- a.push(5);
111
+ var x = [1,2];
120
112
 
121
- console.log(a + ' ' + b); // 3,4,5 3,4,5
113
+ var a = x;
122
114
 
123
- }
115
+ var b = x;
116
+
117
+ x.push(1);
118
+
119
+ console.log(a); // [ 1, 2, 1 ]
120
+
121
+ console.log(b); // [ 1, 2, 1 ]
122
+
123
+ console.log(x); // [ 1, 2, 1 ]
124
+
125
+ console.log();
124
126
 
125
127
  ```

1

追記

2020/10/11 12:29

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -75,3 +75,51 @@
75
75
  数値型の場合、そもそも**参照先を直接書き換える方法が存在しません**。
76
76
 
77
77
  これはオブジェクトの保持の仕方とは全く関係ありません。
78
+
79
+
80
+
81
+ ---
82
+
83
+ > 参照渡しになったり実値渡しになったりする言語は初めてでかなり戸惑っています。
84
+
85
+
86
+
87
+ JavaScriptも同じように動作するかと。
88
+
89
+
90
+
91
+ ```JavaScript
92
+
93
+ {
94
+
95
+ var a = [1];
96
+
97
+ var b = a;
98
+
99
+ console.log(a + ' ' + b); // 1 1
100
+
101
+
102
+
103
+ var a = [2];
104
+
105
+ console.log(a + ' ' + b); // 2 1
106
+
107
+ }
108
+
109
+ {
110
+
111
+ var a = [3, 4];
112
+
113
+ var b = a;
114
+
115
+ console.log(a + ' ' + b); // 3,4 3,4
116
+
117
+
118
+
119
+ a.push(5);
120
+
121
+ console.log(a + ' ' + b); // 3,4,5 3,4,5
122
+
123
+ }
124
+
125
+ ```