gpt4 book ai didi

python - 按值传递对象参数

转载 作者:行者123 更新时间:2023-12-01 02:54:37 27 4
gpt4 key购买 nike

代码:

class Stack:
def __init__(self):
self.items = []

def is_empty(self):
return self.items == []

def push(self, item):
self.items.append(item)

def pop(self):
return self.items.pop()

def length(stack):
i = 0
while not stack.is_empty():
stack.pop()
i += 1
return i

s1 = Stack()
s1.push(3)
s1.push(2)
s1.push(1)
print(length(s1))
s1.pop()

输出:

3
Traceback (most recent call last):
File "Stack.py", line 26, in <module>
s1.pop()
File "Stack.py", line 12, in pop
return self.items.pop()
IndexError: pop from empty list

我希望函数 length() 能够修改 s1 的副本,而不是在更改 s1 时进行修改。有没有办法在Python中做到这一点?

我不允许直接使用s1.items,所以我不能只使用s1[:]。我也无法修改该类。

最佳答案

您可以简单地使用copy模块:

import copy

# ... your code ...

print(length(copy.deepcopy(s1))) # pass a copy to the length function

或者,如果您希望不需要额外的模块,并且可以更改 length 函数,您可以简单地保留 popped 项目并 push获得长度后再次使用它们:

def length(stack):
i = 0
tmp = []
while not stack.is_empty():
tmp.append(stack.pop()) # append them to your temporary storage
i += 1
for item in tmp: # take the items saved in the temporary list
stack.push(item) # and push them into your stack again
return i

关于python - 按值传递对象参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com