如何在Python中为多个变量分配相同的值

时间:2014-04-23 06:37:02

标签: python variable-assignment

我有一个关于Python的问题,我有点新手。让我们假设我想为10个不同的变量分配一个5x5矩阵。我搜遍了整个董事会,我发现了这个:

a, b, c, d, e = myMatrix

这一切都很好,但是在Python中,这意味着当我更改a时,我也会更改其他变量的值,因为如果我正确地得到它,它们都会归结为相同的内存地址。

我的问题:是否有一种快速的方法将myMatrix分配给多个变量并为每个变量分配一个独特的内存地址?这样我就可以在不改变a,b或c的情况下改变myMatrix。我明确地搜索某种多任务。

提前致谢!

2 个答案:

答案 0 :(得分:2)

使用[copy]模块

>>> import copy
>>> new_matrix = copy.deepcopy(myMatrix)

答案 1 :(得分:0)

正如Burhan Khalid和juanchopanza指出的那样,你的例子中会发生什么不同,例如,

  1. " myMatrix"实际上是一个包含5个值的数组(在这种情况下" a"将获得第一个值" e"将获得最后一个值),并且
  2. " myMatrix"是一个对象的实例(在这种情况下" a"到" e"将各自引用同一个对象)。
  3. 听起来你正在考虑案例2,并希望像宏这样的东西会自动将你的单一赋值语句(带有一个右手边值,无论是否深度复制)扩展为5个赋值语句,每个都有自己的左手侧,右手侧和深拷贝。

    我不知道有任何办法,我会指出:

    • 当大多数OO语言在右侧遇到像你这样的赋值操作时,编译器/解释器会查找"复制构造函数"对于RHS对象的类,并使用它(如果找到)生成实际分配给LHS的值(对象引用)。你甚至可以想象一下你所描述的语法是什么样的,复制构造函数假设被调用5次以在RHS上产生5个不同的对象,其引用是然后分配到LHS的五个不同变量?您可以在单个赋值语句中编写哪些内容以使此意图明确?

    • 如果您正在编写代码,其中Deep和Shallow副本实际上会对行为产生影响,那么恕我直言,您应该为自己以及必须阅读和维护您的代码以使其显而易见的任何其他人显式 - 就像wong2的回答一样,重复5次(5个变量中的每个变量一次)。