def fun(arg1,arg2): print('arg1:',arg1)#第二次输出 print('arg2:',arg2)#第二次输出 arg1=100 arg2.append(40) print('arg1:', arg1)#第三次输出 print('arg2:', arg2)#第三次输出 return arg1,arg2 str1=11 list2=[10,20,30] print('str1',str1)# 未进行赋值 print('list2',list2) # 未进行赋值 fun(str1,list2)#传参给def里的arg1和arg2 print('-----------------') print('str1',str1) print('list2',list2) ''' 输出为: str1 11 list2 [10, 20, 30] arg1: 11 arg2: [10, 20, 30] arg1: 100 arg2: [10, 20, 30, 40] ----------------- str1 11 list2 [10, 20, 30, 40] '''
int是数值类型,属于不可变类型,你对 arg1=100 重新赋值,不会影响str1
arg2是列表,属于可变类型,
列表是按地址传递的。
当把一个列表从一个变量传递到另一个变量中时,两个变量都指向这同一个列表的地址。
a=[1,2];
b=a #a和b变量都指向同一个列表的地址。
print(id(a),id(b)) #两个变量指向同一个地址
当对列表的添加元素时,实际上是先读取变量中的地址找到列表,再改变这个列表的属性。
这样之后再用另一个变量中的地址所找到的也是这同一个列表,会获取到一样的列表内容。
b.append(3);
print(b) #输出 [1,2,3]
print(a) #输出 [1,2,3]
如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632