因此,作为/r/dailyprogrammer's在新编程语言中尝试一些简单任务的挑战的一部分,我尝试了Python之后只是略微涉足它。
我必须在Python中重新创建一个Bubble-Sort,这就是我想出来的:
def bubble(unsorted):
length = len(unsorted)
isSorted = False
while not isSorted:
isSorted = True
for i in range(0, length-1):
if(unsorted[i] > unsorted[i+1]):
isSorted = False
holder = unsorted[i]
unsorted[i] = unsorted[i+1]
unsorted[i+1] = holder
myList = [5,6,4,2,10,1]
bubble(myList)
print myList
现在,就我所知,这段代码完美无瑕,这正是问题所在。我无法弄清楚为什么 bubble 函数会影响变量 myList ,而不会向其返回任何内容或重新设置它。
这真让我烦恼,但它可能是一个python类型的东西:)那我或者我确实是一个非常愚蠢的人。
答案 0 :(得分:2)
我不确定混淆的原因是什么,但是如果你认为每次编写func(obj)时整个对象都被复制到堆栈中,那你就错了。
除了诸如数字之类的基本类型之外的所有参数都通过引用传递。这意味着在执行函数后可以更新对象的成员或数组元素。
写一个简单的编程确认:
>>> a=[1]
>>> def f(x):
... x[0]=2
...
>>> f(a)
>>> print a[0]
2
我希望它能澄清一下。
对于原始类型,您会得到不同的结果:
>>> i=1
>>> def f(x):
... x=2
...
>>> f(i)
>>> print i
1
>>>
答案 1 :(得分:1)
答案是unsorted
,myList
指向同一个对象,它们不是副本。因此,当你改变一个你改变另一个。您可以找到它的可视化here。