回答編集履歴
1
d
answer
CHANGED
@@ -24,4 +24,36 @@
|
|
24
24
|
|
25
25
|
b[1] = -1 # b を変更すると a も変わる
|
26
26
|
print(a) # [ 1 -1 3]
|
27
|
-
```
|
27
|
+
```
|
28
|
+
|
29
|
+
## 追記
|
30
|
+
|
31
|
+
b = a[スライス] とした場合、b と a は異なるオブジェクトになります。
|
32
|
+
ただし、numpy の場合は、view という機能で異なるオブジェクトでも内部のデータは共有するということをやっています。
|
33
|
+
そのため、b = a[:] とした場合でも b は a の view になるので、オブジェクトとしては a と b は異なりますが、内部データは共有しています。
|
34
|
+
このことは次のようにして確かめられます。
|
35
|
+
|
36
|
+
```
|
37
|
+
a = np.array([1, 2, 3])
|
38
|
+
b = a[:] # b は a とは違うオブジェクト、だけど内部データは共有している
|
39
|
+
|
40
|
+
b[1] = 100
|
41
|
+
|
42
|
+
# b を変えたら a も変わっている
|
43
|
+
print(a) # [ 1 100 3]
|
44
|
+
```
|
45
|
+
|
46
|
+
view というのは numpy の機能であり、Python の言語に備わった機能ではありません。
|
47
|
+
Python のリストの場合、スライスすると a と b は異なるオブジェクトで numpy の view のように内部データを共有するような機能もないので、コピー (deep copy) になります。
|
48
|
+
|
49
|
+
```
|
50
|
+
a = [1, 2, 3]
|
51
|
+
b = a[:]
|
52
|
+
|
53
|
+
b[1] = 100
|
54
|
+
|
55
|
+
# b と a は違うオブジェクトなので、a は変わっていない
|
56
|
+
print(a) # [1, 2, 3]
|
57
|
+
```
|
58
|
+
|
59
|
+
[Pythonのcopyとdeepcopyについて - Qiita](https://qiita.com/Kaz_K/items/a3d619b9e670e689b6db)
|