我刚刚开始为一个学校项目学习Python,但我对指针有点困惑。这很奇怪,因为我刚刚通过了组装考试。你知道吗
所以在这种情况下:
var1 = [0, 1]
var2 = [2, 3]
matrix = [
var1, var2,
var2, var1
]
newVars = [[0, 1], [2, 3]]
如果我这样做:
var1 = newVars[2][:]
var2 = newVars[1][:]
矩阵会保持和以前一样的值。因为变量现在定位到一个新地址,但矩阵的值不是。你知道吗
但显然如果我这么做:
var1[:] = newVars[2][:]
var2[:] = newVars[1][:]
它会改变特定存储位置的存储值。你知道吗
我的问题如下:
Python是通过引用传递的。这意味着当你这样做时:
如果你改变
var1
或var2
,它会改变矩阵中的值。矩阵有指向var1
和var2
的指针,在python中不可能有纯值。相反,可以使用list.copy()
获取变量的新副本。newVars
则与所示的其他值完全无关。但是当你给var1
或var2
赋一个新值时,它现在与原始矩阵无关。(您更改了指针指向的位置,但没有更改指针的值本身,因此矩阵保留原始值)列表切片创建一个新对象。但是由于矩阵有指向原始对象的指针,
var1
和var2
只是更改了它们指向的对象,所以矩阵不会更改。是这样的:更改
0x0001
会更改所有指向它的指针,更改指针会更改0x0001
,但是切片列表会创建一个新列表。你知道吗相关问题 更多 >
编程相关推荐