为什么python会创建一个变量指向另一个变量的指针?
我试图解决以下问题: 假设一个病毒感染了一所大学的数据库并改变了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的程序 我的代码如下所示:为什么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并
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