回答編集履歴

3

修正

2020/09/04 11:23

投稿

tiitoi
tiitoi

スコア21956

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

修正

2020/09/04 11:23

投稿

tiitoi
tiitoi

スコア21956

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

2020/09/04 11:18

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- numpy の方針として可能な限り Shallow コピーとし済ますようにっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
9
+ numpy の方針として可能な限り shallow copy を行うようにっているので、明示的にコピーしたい場合は `ndarray.copy()` を使いましょう。
10
10
 
11
11
 
12
12