Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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_Python 3.x_Variables_Pointers_Indexing - Fatal编程技术网

为什么python会创建一个变量指向另一个变量的指针?

为什么python会创建一个变量指向另一个变量的指针?,python,python-3.x,variables,pointers,indexing,Python,Python 3.x,Variables,Pointers,Indexing,我试图解决以下问题: 假设一个病毒感染了一所大学的数据库并改变了AR (学术注册)学生注册。过了一段时间,它被发现了 病毒产生的AR(ARV=x1 x2 x3 x4 x5 x6 x7 x8 x9) 可以获得正确的AR(ARC=y1 y2 y3 y4 y5 y6 y7 y8 y9) 通过以下操作: y1=x1,y2=x2,y3=x8,y4=x7,y5=x5,y6=x6,y7=x3,y8= x4,y9=x9 e、 例如,ARV=197845602-->ARC=190645782 制作一个读取ARV并

我试图解决以下问题:

假设一个病毒感染了一所大学的数据库并改变了AR (学术注册)学生注册。过了一段时间,它被发现了 病毒产生的AR(ARV=x1 x2 x3 x4 x5 x6 x7 x8 x9) 可以获得正确的AR(ARC=y1 y2 y3 y4 y5 y6 y7 y8 y9) 通过以下操作:

y1=x1,y2=x2,y3=x8,y4=x7,y5=x5,y6=x6,y7=x3,y8= x4,y9=x9

e、 例如,ARV=197845602-->ARC=190645782

制作一个读取ARV并给出ARC的程序

我的代码如下所示:

pt = input('Type the AR affected by the virus: ')

arv = list(pt)
arc = arv

arc[2] = arv[7]
arc[3] = arv[6]
arc[6] = arv[2]
arc[7] = arv[3]

jarc = ''.join(arc)
print('\nCorrect AR:',jarc)
运行代码时,您会看到生成的弧不是上面示例中的弧。为什么?我找到了。“arv”随着“arc”的变化而变化,它应该保持不变


在我看来,python创建了一个变量“arc”指向“arv”的指针。谁能解释一下为什么会这样?我怎样才能正确地解决这个问题呢?

正确的做法是复制:

arc = arv.copy()

正确的做法是复制:

arc = arv.copy()

解决方案是复制列表内容,而不是列表描述符:

arc = arv[:]

简而言之,这就是语言的定义方式。您可以在各种Python站点上阅读历史记录;完整的解释超出了StackOverflow的一般用途范围

从高层来看,Python实现基本指针的方式是这样的:对象赋值是指向原始对象,而不是复制。这节省了虚假的对象复制:如果你想要一个新的拷贝,你必须明确分配更多的存储空间


请注意,您的原始版本,arv,不是“不变的”:这是一个Python技术术语。列表是一个可变对象;元组是不可变的同源项。

解决方案是复制列表内容,而不是列表描述符:

arc = arv[:]

简而言之,这就是语言的定义方式。您可以在各种Python站点上阅读历史记录;完整的解释超出了StackOverflow的一般用途范围

从高层来看,Python实现基本指针的方式是这样的:对象赋值是指向原始对象,而不是复制。这节省了虚假的对象复制:如果你想要一个新的拷贝,你必须明确分配更多的存储空间


请注意,您的原始版本,arv,不是“不变的”:这是一个Python技术术语。列表是一个可变对象;元组是不可变的同源词。

这是学校作业吗?因为在Python中,作业不会复制任何内容。这是大学作业@Olian04@Nelthar请看这个请看Ned Batcheld的。这是学校作业吗?因为在Python中,作业不会复制任何内容。这是大学作业@Olian04@Nelthar请看这个阅读Ned Batchelder的。谢谢你的帮助!谢谢你的帮助!xD谢谢你的回答xD谢谢你的回答xD