回答編集履歴
3
修正
test
CHANGED
@@ -34,6 +34,8 @@
|
|
34
34
|
|
35
35
|
2項演算はディープコピーになる仕様なので、以下のように書いても同じ処理になりますけど、コピーするためにこうしているという意図がわかりづらいく、暗黙的な仕様に依存したコードはバグの原因にも繋がります。
|
36
36
|
|
37
|
+
また、添字 `[]` による配列の一部を取り出す処理は浅いコピーとディープコピーの両方のパターンがありえます。関数も reshape() のように浅いコピーを返すものもあれば、abs() のようにディープコピーを返すものも両方存在します。
|
38
|
+
|
37
39
|
|
38
40
|
|
39
41
|
```python
|
2
修正
test
CHANGED
@@ -25,3 +25,39 @@
|
|
25
25
|
print(x, y)
|
26
26
|
|
27
27
|
```
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
## 追記
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
2項演算はディープコピーになる仕様なので、以下のように書いても同じ処理になりますけど、コピーするためにこうしているという意図がわかりづらいく、暗黙的な仕様に依存したコードはバグの原因にも繋がります。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
```python
|
40
|
+
|
41
|
+
import numpy as np
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
x = np.array([1, 2, 3])
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
y = x + 0
|
50
|
+
|
51
|
+
x[0] = 100
|
52
|
+
|
53
|
+
print(x, y)
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
Python 公式のコーディング方針にも `Explicit is better than implicit. (暗示するより明示するほうがいい)` と書いてあります。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
元の配列とは別の配列を作りたいという意図があるならば、`ndarray.copy()` を使うべきです。
|
1
d
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
numpy の方針として可能な限り
|
9
|
+
numpy の方針として可能な限り shallow copy を行うようになっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
|
10
10
|
|
11
11
|
|
12
12
|
|