欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python中修改形参对实参的影响,如何避免形参对实参的影响

程序员文章站 2022-07-08 15:50:27
自定义一个测试函数,通过对比形参和实参的ID来研究修改形参对实参的影响。def test(a) :print("a =",a,id(a))c = 20test(c)print("c =",c,id(c))a = 20 140707504189792c = 20 140707504189792传参后a和c的id相同,说明a和c指向同一对象。接下来对a进行重新赋值。def test(a) :a = 10print("a =",a,id(a))c = 20test(c)...

自定义一个测试函数,通过对比形参和实参的ID来研究修改形参对实参的影响。

def test(a) :
	
	print("a =",a,id(a))
c = 20
test(c)
print("c =",c,id(c))
a = 20 140707504189792
c = 20 140707504189792

传参后a和c的id相同,说明a和c指向同一对象。
接下来对a进行重新赋值。

def test(a) :
	a = 10
	print("a =",a,id(a))
c = 20
test(c)
print("c =",c,id(c))
a = 10 140707504189472
c = 20 140707504189792

a的值和id已经发生了改变,但是c没有发生变化,说明对a重新赋值过程中,系统新建了一个对象,a指向了新的对象,且对c没有产生影响。

接下来测试传列表的情况。

def test(a) :
	
	print("a =",a,id(a))
c = [1,2,3]
test(c)
print("c =",c,id(c))
a = [1, 2, 3] 3051365556744
c = [1, 2, 3] 3051365556744

a和c同样指向同一个对象,接下来通过形参a修改列表中的元素。

def test(a) :
	a[0] = 6
	print("a =",a,id(a))
c = [1,2,3]
test(c)
print("c =",c,id(c))
a = [6, 2, 3] 2355399385608
c = [6, 2, 3] 2355399385608

a和c的id同时发生改变且指向同一对象,原因是修改列表中的元素是对对象进行操作,系统会新建一个对象,然后将新的ID赋给指向原对象的所有变量。所以,对对象进行操作会影响所有指向该对象的变量。可以使用以下两种方法使形参与实参相互独立:

def test(a) :
	a[0] = 6
	print("a =",a,id(a))
c = [1,2,3]
#方法一:传副本过去
test(c.copy())  
#方法二:
test(c[:])
print("c =",c,id(c))
a = [6, 2, 3] 2606175445576
a = [6, 2, 3] 2606175445576
c = [1, 2, 3] 2606175445512

本文地址:https://blog.csdn.net/weixin_45567090/article/details/110940889

相关标签: python 列表