2

如果我定义

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

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

4

3 回答 3

2

将名称重新绑定到现有值可能有用的一个原因是,如果您打算为不同的对象重用原始名称。例如,这个计算n斐波那契数列中第 th 个数的函数重用了名称abtemp在循环中重复,每次将先前引用的值绑定a到(通过 temp):b

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
于 2013-09-07T14:26:55.243 回答
1

假设我有一个类实例的属性frobnoz,一个对类实例的引用,该类实例Frobnoz又是一个属性marfoos,它是所有相关联的 marfoos 的列表,我想对第一个执行几个操作。

marfoo = self.frobnoz.marfoos[0]
marfoo.rotate(CLOCKWISE, degrees=90)
if marfoo.is_cloudy():
    self.purge_clouds(marfoo)

如果无法创建对我想要对其执行操作的 marfoo 的附加引用,我不仅必须对它进行冗长的引用,而且还会产生查找frobnozmarfoos引用以及第一个元素的费用每次我想使用它时都在列表中。

于 2013-09-07T14:08:09.257 回答
0

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

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

changeFoo(foo)

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

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

于 2013-09-07T14:09:08.127 回答