Python 是按引用传递的。这意味着当你执行以下代码时:
matrix = [
var1, var2,
var2, var1
]
当你更改
var1
或
var2
,它会更改矩阵中的值。矩阵有指向
var1
和
var2
的指针,在Python中无法使用纯值。相反,您可以使用
list.copy()
来获取变量的新副本。另一方面,
newVars
与其他显示的值完全无关。但是当您为
var1
或
var2
分配一个新值时,它现在与原始矩阵无关。 (您更改了其指向的位置,但未更改指针本身的值,因此矩阵保留了原始值)
对列表切片会创建一个新对象。但由于矩阵具有指向原始对象的指针,并且
var1
和
var2
只是更改了它们指向的位置,因此矩阵不会更改。就像这样:
var1 & var2: create a new list and assign its pointer to your self
var1 -> 0x0001
var2 -> 0x0002
matrix: take pointers from var1 and var2 and store it in you.
matrix -> 0x0001, 0x0002.
newVars: create a new list and assign its pointer to your self
newVars -> 0x0004
newVars: create a new list and assign its pointer into your current list (2x)
newVars -> 0x0004: 0x0005, 0x0006
var1 & var2: switch your pointer to a new *copy* of a slice of newVars I have made. (creates new pointers)
var1 -> 0x0007
var2 -> 0x0008
matrix -> 0x0001, 0x0002.
改变0x0001
会改变所有指向它的内容,改变指针也会改变0x0001
,但是切片列表会创建一个新列表。