变量如何在Python中工作?

内尔加尔

我刚刚开始为一个学校项目学习Python,但是我对指针有些困惑。这很奇怪,因为我刚刚参加了大会考试。

因此,在这种情况下:

var1 = [0, 1]
var2 = [2, 3]

matrix = [
    var1, var2,
    var2, var1
]

newVars = [[0, 1], [2, 3]]

如果我这样做:

var1 = newVars[2][:]
var2 = newVars[1][:]

矩阵将保持与以前相同的值。因为var现在定位到新地址,但是矩阵的值不在。

但是很明显,如果我这样做:

var1[:] = newVars[2][:]
var2[:] = newVars[1][:]

它会更改特定存储位置上的存储值。

我的问题如下:

  • 我的结论正确吗?
  • 还有其他方法可以通过更改变量来更改矩阵中的值吗?
  • 关于Python中的var,我还需要了解什么吗?
ɥʇʎԀʎ

Python是通过引用传递的这意味着您执行以下操作:

matrix = [
    var1, var2,
    var2, var1
]

然后您更改var1var2,它更改矩阵中的值。矩阵具有指向var1和的指针var2,并且在python中不可能有纯值。相反,您可以使用list.copy()获取变量的新副本。newVars另一方面,与显示的其他值完全无关。但是,当您分配var1var2新值时,它现在与原始矩阵无关。(您更改了它指向的位置,但没有更改指针的值本身,因此矩阵保留了原始值)

列表切片将创建一个新对象。但是由于矩阵具有指向原始对象的指针,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,但是切片列表会创建一个新列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章