Меня смущает простой случай назначения переменных массива в Python, и я надеюсь, что кто-нибудь поможет мне проверить его.
В моем понимании, если a является списком, b просто скопировал ссылку на a, и когда вы редактируете b, a также будет изменено.Между тем, вы можете использовать оператор is
для проверки их идентификаторов.Например:
a = ["a", ["a", "b"]]
b = a[1]
b.append("c")
Тогда будет возвращено True
, когда я использую
In [7]: b is a[1]
Out[7]: True
Однако, если a и b являются массивами,
import numpy as np
a = np.identity(3)
b = a[0, :]
Впоследствии, когда я использую is
для проверки, он возвращает False
, но когда я отредактировал b, a также будет изменен:
In [14]: b is a[1]
Out[14]: False
In [15]: a
Out[15]:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
In [16]: b
Out[16]: array([0., 1., 0.])
In [17]: b *= 2
In [18]: b
Out[18]: array([0., 2., 0.])
In [19]: a
Out[19]:
array([[1., 0., 0.],
[0., 2., 0.],
[0., 0., 1.]])
В принципе, я думаю, что если is
вернетFalse
, переменные будут иметь разные идентификаторы и ссылки, что означает, что они независимы, но сейчас это кажется неправильным, может ли кто-нибудь помочь мне проверить это?
Большое спасибо!