2 回答
TA贡献1796条经验 获得超7个赞
在python中,列表是通过object-reference传递的。实际上,python中的所有内容都是一个对象,但是当您传递一个变量以使其起作用时,如果更改了值,它将创建该对象的本地副本,但是如果是列表,则如果它创建了本地副本,则即使引用仍保留到先前列表,它也会创建一个本地副本。目的。因此,列表的值将不会更改。\
您可以参考链接。
您可以检查以下示例以进行澄清。
def fun1(b):
for i in range(0,len(b)):
b[i]+=4
arr=[1,2,3,4]
print("Before Passing",arr)
fun2(arr)
print("After Passing",arr)
#output
#Before Passing [1, 2, 3, 4]
#After Passing [5, 6, 7, 8]
如果您不希望任何函数意外更改值,则可以使用不可变的对象,例如元组。
编辑:(复制示例)
我们可以通过打印两个对象的ID进行检查。
def fun(a):
a=5
print(hex(id(a)))
a=3
print(hex(id(a)))
fun(a)
# Output:
# 0x555eb8890cc0
# 0x555eb8890d00
但是,如果我们使用List对象来执行此操作:
def fun(a):
a.append(5)
print(hex(id(a)))
a=[1,2,3]
print(hex(id(a)))
fun(a)
# Output:
# 0x7f97e1589308
# 0x7f97e1589308
TA贡献1790条经验 获得超9个赞
Y并不重视它对内存的某些绑定。当您将其传递给函数时,其内存地址将传递给函数(按引用调用)。另一方面,x是值,当您将其传递给函数时,将使用相同的值创建新的局部变量。(在汇编级别,函数的所有参数都通过堆栈指针传递。x的值和y的地址被压入堆栈指针。
添加回答
举报