如果我定义
foo = [[1,2],[2,3],[3,4]]
bar = foo
然后foo和bar引用相同的对象,即[[1,2],[2,3],[3,4]]。我现在可以使用这些“标签/命名空间/引用”中的任何一个来对对象[[1,2],[2,3],[3,4]]进行更改,但这对任何人都有用吗?
答案 0 :(得分:2)
将名称重新绑定到现有值有用的一个原因是,您打算将原始名称重用于其他对象。例如,这个计算Fibonacci序列中n
个数的函数在循环中重复使用名a
,b
和temp
,绑定前面引用的值每次a
到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
答案 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中),也可以使用它。