当参数是对象属性时,复制函数参数并更改副本的最佳方法?[Python]

2024-04-20 12:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

请注意,当传递的参数是对象时,复制参数并更改复制属性的值也会更改原始属性的值(浅复制)。但是,当传递的对象是简单变量时,创建和更改副本的值不会更改原始副本(深度副本)

示例:

1。作为参数传递的变量

def increment(x):
    y = x
    y += 1
    print(f'{x=}, {y=}')
increment(2)
Out: 
x=2, y=3

x在其副本y增加时未更改

2。对象作为参数传递

class Node:
    def __init__(self, val=0):
        self.val = val

def increment(x):
    y = x
    y.val += 1
    print(f'{x.val=}, {y.val=}')
increment(Node(2))
Out: 
x.val=3, y.val=3

当copyy.val增加时x.val也增加

创建对象的深度副本的最佳(计算时间效率)方法是什么?我可以用一种不必对函数代码进行任何更改的方式编写类吗