Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当原始变量更新时,如何将依赖于另一个变量的变量设置为更新?_Python_Variables - Fatal编程技术网

Python 当原始变量更新时,如何将依赖于另一个变量的变量设置为更新?

Python 当原始变量更新时,如何将依赖于另一个变量的变量设置为更新?,python,variables,Python,Variables,在python中,让我们运行以下代码行: x=0 y=x x+=1 打印(y) 打印(x) 尽管我们在第2行中设置了x=y,但第一行输出与第二行输出明显不同。任何有编程经验的人都知道这一点 但是,有没有办法使x像y那样更新?我使用的是: 我使用的是: 要扩展@juanpa的注释,如果将值包装在列表中,则可以获得以下行为: x = [0] y = x x[0] += 1 print(y[0]) print(x[0]) 要扩展@juanpa的注释,如果将值包装在列表中,则可以获得以下行为: x

在python中,让我们运行以下代码行:

x=0
y=x
x+=1
打印(y)
打印(x)
尽管我们在第2行中设置了
x=y
,但第一行输出与第二行输出明显不同。任何有编程经验的人都知道这一点

但是,有没有办法使
x
y
那样更新?

我使用的是:

我使用的是:


要扩展@juanpa的注释,如果将值包装在列表中,则可以获得以下行为:

x = [0]
y = x
x[0] += 1
print(y[0])
print(x[0])

要扩展@juanpa的注释,如果将值包装在列表中,则可以获得以下行为:

x = [0]
y = x
x[0] += 1
print(y[0])
print(x[0])

你不能让两个变量内在地相互链接,但你可以让两个变量引用同一个对象,然后对该对象进行变异,变化将反映在两个变量中,显然,因为它们引用的是同一个对象,你不能让两个变量内在地相互链接,但是你可以让两个变量引用同一个对象,然后对该对象进行变异,这些变化将反映在两个变量中,很明显,因为它们引用的是同一个对象谢谢,这很有帮助。然而,为什么原始变量在Python中不能像这样工作?例如,在PHP中,可以指定变量是否应反映更改。你能给我指一些关于这方面的文件吗?谢谢。我想它们在Python中不会这样工作,因为在大多数情况下(见鬼,几乎所有情况下),这不是您希望它们工作的方式。此链接可能会有所帮助。谢谢您的链接。这个链接清楚地解释了有些类型是不可变的,有些是可变的(这应该很明显,但我没有注意到)。谢谢,这很有帮助。然而,为什么原始变量在Python中不能像这样工作?例如,在PHP中,可以指定变量是否应反映更改。你能给我指一些关于这方面的文件吗?谢谢。我想它们在Python中不会这样工作,因为在大多数情况下(见鬼,几乎所有情况下),这不是您希望它们工作的方式。此链接可能会有所帮助。谢谢您的链接。这个链接清楚地解释了有些类型是不可变的,有些是可变的(这应该很明显,但我没有注意到)。你好@Shuo,我不明白你的回答。这是否意味着您正在使用类来完成此任务?或者您正在使用
assert
命令?我对python不是很有经验,所以我不知道您想要表达什么。是的,我使用类。assert命令仅用于验证x和y的值。我认为@JohnGordon有一个更好的例子。我不认为类型是否是不可变的是这里的问题。与@juanpa的注释一样,您应该将两个变量设置为同一个对象,并修改该对象拥有的数据。在@John的回答中,两个变量都指向同一个对象,即
列表
,然后更改该列表所拥有的值。如果您熟悉C,则本例中的x和y类似于包含内存位置地址的指针,该位置存储值。您可以使用命令
id
检查两个变量是否为同一对象<代码>x=[0];y=x然后你会发现实际上
id(x)==id(y)
所以如果你改变其中一个,另一个也会改变,因为它们基本上是一样的。如果您使用
x=1
,那么下次为其分配新值时,例如
x=2
,则
id(x)
实际上会发生变化。我不能在其他答案下发表评论,因为我的声誉很低。你好@Shuo,我不明白你的回答。这是否意味着您正在使用类来完成此任务?或者您正在使用
assert
命令?我对python不是很有经验,所以我不知道您想要表达什么。是的,我使用类。assert命令仅用于验证x和y的值。我认为@JohnGordon有一个更好的例子。我不认为类型是否是不可变的是这里的问题。与@juanpa的注释一样,您应该将两个变量设置为同一个对象,并修改该对象拥有的数据。在@John的回答中,两个变量都指向同一个对象,即
列表
,然后更改该列表所拥有的值。如果您熟悉C,则本例中的x和y类似于包含内存位置地址的指针,该位置存储值。您可以使用命令
id
检查两个变量是否为同一对象<代码>x=[0];y=x然后你会发现实际上
id(x)==id(y)
所以如果你改变其中一个,另一个也会改变,因为它们基本上是一样的。如果您使用
x=1
,那么下次为其分配新值时,例如
x=2
,则
id(x)
实际上会发生变化。我无法在其他答案下发表评论,因为我的声誉很低。