PyR*_*lez 3 python reference pass-by-reference python-2.7
在python中,两个不同的变量可以表示同一个对象.注意:
>>> list1=['This is list1.']
>>> list2=list1
>>> list2[0] = 'This is actually list2 not list one.'
>>> print list1
['This is actually list2 not list one.']
Run Code Online (Sandbox Code Playgroud)
这是此代码的链接. 如您所见,没有list1或list2,只有一个列表有两个名称.我很清楚这种效果,我从一本书中记得这是故意的,但我忘记了这种现象.此外,它偶尔是bug的来源,而其他语言没有这个问题.我确实感觉某些与物体有关的东西会在没有物体的情况下破裂.这有什么特别的好处(因为python是我真正知道的.)
这通常被称为具有对单个对象的多个引用.引用数称为refcount.
在递归数据结构(树,链表)的情况下,它也可以称为结构共享.
这有什么特别的好处
您不必复制值以将其传递给函数.假设你有一个功能
def print_list(l):
print("I see %d elements:" % len(l))
for x in l:
print(x)
Run Code Online (Sandbox Code Playgroud)
将列表传递给此函数时,实际传递的内容仅是对列表的引用,而不是列表内容的副本.同样,类似的方法append,extend,sort等是很难没有这个功能的实现; 他们必须一直构建并返回新的列表.对于任何就地更改数据结构的函数或方法也是如此.
当您进行多线程编程时,共享数据结构实际上是设置通信的常用方法:多个线程将引用Queue用于传递消息的公共线程.
其他语言没有这个问题
在所有语言中,除了纯函数之外,这可能是一个问题.在C,C++,Go和Pascal中,它可以通过指针发生,在Prolog中无意中统一,在Java中它与Python中的工作方式相同.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |