我是Python的初学者。我想知道某些情况下通过值而不是引用来传递。假设我们有课:
class myC():
def __init__(self, x):
self.val = x
和功能:
def myF1(myc):
myc.val = 1
def myF2(myDict):
myDict['a'] = 0
如果我们定义变量并调用函数:
a = myC(0)
myDict = {}
myF1(a)
myF2(myDict)
由于用户定义的类和字典都是可变类型,因此变量a和myDict的值将更改。是否有蚂蚁方法只是传递变量的值,以使变量本身不会改变?如果有多种方法,请告诉我所有方法。非常感谢。
答案 0 :(得分:1)
Python总是按值传递。但是,这些值是参考。您在python中拥有的唯一值类型是“ 引用”。 变量是名称,值是引用。
这里证明python通过值传递:
def myfn(x):
x = 2
a = {}
myfn(a)
如果python传递了对该函数的引用,则函数代码将通过使其引用整数对象a
来修改2
,但这不会发生。 Python仅将值(作为引用)传递给函数,现在函数内部的x
存储该引用。
x
是对同一对象的新引用,但是使x
存储对其他对象的引用不会修改a
。无法修改a
名称所持有的引用。您可以修改dict对象,但不能更改a
(该dict的引用)的值
如果您要一个新对象,则必须明确复制它。一些不可变的对象(例如整数)具有隐式复制,因为它们在操作时返回了一个新对象:
a = 5
a = a + 2
在此示例中,a + 2
语义上创建并返回了一个 new int
对象,该对象名称a
现在存储了对其的引用。 5
和2
未被修改(它们是不可变的)