为什么在Python中使用a = b

时间:2013-09-07 14:01:34

标签: python

如果我定义

foo = [[1,2],[2,3],[3,4]]
bar = foo

然后foo和bar引用相同的对象,即[[1,2],[2,3],[3,4]]。我现在可以使用这些“标签/命名空间/引用”中的任何一个来对对象[[1,2],[2,3],[3,4]]进行更改,但这对任何人都有用吗?

3 个答案:

答案 0 :(得分:2)

将名称重新绑定到现有值有用的一个原因是,您打算将原始名称重用于其他对象。例如,这个计算Fibonacci序列中n个数的函数在循环中重复使用名abtemp,绑定前面引用的值每次ab(通过临时):

def fib(n):
    a = 1
    b = 0
    for _ in range(n):
       temp = a
       a = a+b
       b = temp
       # A more Pythonic version of the last three lines would be: a, b = a+b, a
    return b

答案 1 :(得分:1)

假设我有一个类实例的属性frobnoz,它是对Frobnoz类实例的引用,而marfoos类又是一个属性marfoo = self.frobnoz.marfoos[0] marfoo.rotate(CLOCKWISE, degrees=90) if marfoo.is_cloudy(): self.purge_clouds(marfoo) ,它是所有类的列表相关的marfoos,我想在第一个上执行几个操作。

frobnoz

如果无法创建对我想要执行操作的marfoo的额外引用,我不仅要对它进行冗长的引用,而且还要花费同时查找{{1每次我想使用它时,都会引用列表的第一个元素。

答案 2 :(得分:0)

修改值的函数调用很有用(除其他外):

def changeFoo(bar):      
    bar[0][0]=3.14

changeFoo(foo)

注意:这在技术上并不使用赋值,但它是等效的。

当多个对象需要引用同一个对象时(例如在linked lists中),也可以使用它。