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

回答編集履歴

3

修正

2020/09/04 11:23

投稿

tiitoi
tiitoi

スコア21960

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

修正

2020/09/04 11:23

投稿

tiitoi
tiitoi

スコア21960

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

2020/09/04 11:18

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  上に上げた例では Deep Copy になります。
4
4
 
5
- numpy の方針として可能な限り Shallow コピーとし済ますようにっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
5
+ numpy の方針として可能な限り shallow copy を行うようにっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
6
6
 
7
7
  ```python
8
8
  import numpy as np