回答編集履歴
3
修正
answer
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
## 追記
|
17
17
|
|
18
18
|
2項演算はディープコピーになる仕様なので、以下のように書いても同じ処理になりますけど、コピーするためにこうしているという意図がわかりづらいく、暗黙的な仕様に依存したコードはバグの原因にも繋がります。
|
19
|
+
また、添字 `[]` による配列の一部を取り出す処理は浅いコピーとディープコピーの両方のパターンがありえます。関数も reshape() のように浅いコピーを返すものもあれば、abs() のようにディープコピーを返すものも両方存在します。
|
19
20
|
|
20
21
|
```python
|
21
22
|
import numpy as np
|
2
修正
answer
CHANGED
@@ -11,4 +11,22 @@
|
|
11
11
|
y = x.copy()
|
12
12
|
y[0] = 100
|
13
13
|
print(x, y)
|
14
|
-
```
|
14
|
+
```
|
15
|
+
|
16
|
+
## 追記
|
17
|
+
|
18
|
+
2項演算はディープコピーになる仕様なので、以下のように書いても同じ処理になりますけど、コピーするためにこうしているという意図がわかりづらいく、暗黙的な仕様に依存したコードはバグの原因にも繋がります。
|
19
|
+
|
20
|
+
```python
|
21
|
+
import numpy as np
|
22
|
+
|
23
|
+
x = np.array([1, 2, 3])
|
24
|
+
|
25
|
+
y = x + 0
|
26
|
+
x[0] = 100
|
27
|
+
print(x, y)
|
28
|
+
```
|
29
|
+
|
30
|
+
Python 公式のコーディング方針にも `Explicit is better than implicit. (暗示するより明示するほうがいい)` と書いてあります。
|
31
|
+
|
32
|
+
元の配列とは別の配列を作りたいという意図があるならば、`ndarray.copy()` を使うべきです。
|
1
d
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
上に上げた例では Deep Copy になります。
|
4
4
|
|
5
|
-
numpy の方針として可能な限り
|
5
|
+
numpy の方針として可能な限り shallow copy を行うようになっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
|
6
6
|
|
7
7
|
```python
|
8
8
|
import numpy as np
|