如何在Python中给多个变量赋相同的值

-1 投票
2 回答
1492 浏览
提问于 2025-04-18 03:53

我有一个关于Python的问题,我对这个语言还不太熟悉。假设我想把一个5x5的矩阵赋值给10个不同的变量。我到处查了一下,发现了这个:

a, b, c, d, e = myMatrix

这看起来没问题,但在Python中,这意味着当我改变变量a的时候,其他变量的值也会跟着改变,因为它们都指向同一个内存地址,如果我理解没错的话。

我的问题是:有没有快速的方法可以把myMatrix赋值给多个变量,并且让每个变量都有独立的内存地址?这样我就可以改变myMatrix,而不会影响到a、b或c。我特别想找一种多重赋值的方法。

提前谢谢你们!

2 个回答

0

正如Burhan Khalid和juanchopanza所提到的,你的例子在不同情况下会有不同的表现,比如:

  1. 如果“myMatrix”实际上是一个包含5个值的数组(在这种情况下,“a”会得到第一个值,而“e”会得到最后一个值),
  2. 如果“myMatrix”是一个对象的实例(在这种情况下,“a”到“e”都会指向同一个对象)。

听起来你在考虑第二种情况,并希望有类似宏的东西,能自动把你的一条赋值语句(无论是深拷贝还是浅拷贝的单一右侧值)扩展成5条赋值语句,每条都有自己的左侧和右侧,以及深拷贝。

我不知道有没有办法做到这一点,我想指出的是:

  • 当大多数面向对象的编程语言遇到像你这样的赋值操作时,右侧是一个对象,编译器或解释器会寻找这个右侧对象类的“拷贝构造函数”,如果找到了,就会用它来生成实际赋值给左侧的值(一个对象引用)。你能想象一下你描述的语法是什么样的吗?在这种情况下,拷贝构造函数需要被调用5次,以产生5个不同的对象,然后这些对象的引用再赋值给左侧的五个不同变量。你能在一条赋值语句中写出什么来清楚表达这个意图呢?

  • 如果你写的代码中深拷贝和浅拷贝会对行为产生影响,那么我认为你有责任让自己和其他需要阅读和维护你代码的人都能清楚明白这一点——就像wong2的回答那样,重复5次(每个变量一次)。

2

使用 [copy] 模块

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

撰写回答