python函数传参

python中参数传递到函数中,什么情况下,参数会发生改变?

在c语言中,传入形参到函数内,属于传递,传入地址或指针,则在函数中指针的内容发生改变,运行后参数也会发生改变。

python中,有不可改变对象,有可改变对象

不可改变对象例如: 整型对象,字符串,元组等, 这些对象传入函数后,不会发生改变

可改变对象如: 列表,字典,这些对象传入函数后,会发生改变

因此在传参过程中, 需要注意,如果不想让列表,字典,可以在函数内部开头,copy其副本,再进行后续的操作

"""
**python* *函数中,的参数传递与**c**语言的参数传递对比:**
**c:* *传入形参**a,**函数运行完,**a**值不变
\* *: 传入地址或作指针,运行函数,地址内容发生改变**
**
**python**:可更改与不可更改对象**
**mutable,immtable

**在**python**中,**strings,tuples,numbers**是不可更改对象**
**list,dict**等是可以更改对象**
**python* *中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
**
**不可改变: 整数,字符串,元组 传入函数,是值的传递

**可改变: 列表,字典,经过函数后发生改变,也会改变**
**https://www.runoob.com/python/python-functions.html

**"""
**
*a=10
tuple_a=(2,3,4)
str='test_string'
list_a=[1,2,3,'a','b','c']
def test_change_int(a):
    a=2*a
    print(f'函数内部,a发生改变后,a={a}')

test_change_int(a)
print(a)
\# def test_change_truple(tuple_a):
\#     tuple_b=tuple_a
\#     tuple_b[0]=9
\#     tuple_b[2]=99
\#     print(f'函数内部tuple_a发生改变后,tple_b={tuple_b}')
\# test_change_truple(tuple_a)
\# print(tuple_a)

def test_change_str(str):
  str=str+' hello world'
  print(f'函数内部,str发生后的改变,str={str}')


test_change_str(str)
print(str)


def test_change_list(list_a):
    list_a.append('hello world')
    print(f'函数内部,list_a发生改变 ,list_a={list_a}')



test_change_list(list_a)
print(list_a)

dic={'h':'good'}
def test_change_dic(dic):
    dic['h']='hello'
    print(f'函数内部,dic发生改变 ,dic={dic}')

test_change_dic(dic)
print(dic)

image-20231109171104856

#在类中传入list作为参数传入实例变量中
class test:
    def __init__(self,list_a,name,age):
        self.list_a=list_a
        self.name=name
        self.age=age


    def change_list(self):
        self.list_a.append('hello world')
        print(self.list_a)



list_t=[1,2,3]
test1=test(list_t,'hello',12)
test1.change_list()
print(list_t)
list_b=list_t
list_b.append("are you ok")

print('--------------------------')
print(list_b)
print(list_t)
print(test1.list_a)

print('--------------------------')
test1.change_list()
print(list_b)
print(list_t)
print(test1.list_a)

print('--------------------------')
test1.change_list()
print(list_b)
print(list_t)
print(test1.list_a)


image-20231109171010562

class test:
    def __init__(self,list_a,name,age):
        self.list_a=list_a.copy()  #使用copy()复制副本
        self.name=name
        self.age=age


    def change_list(self):
        self.list_a.append('hello world')
        print(self.list_a)



list_t=[1,2,3]
test1=test(list_t,'hello',12)
test1.change_list()
print(list_t)
list_b=test1.list_a
list_b.append("are you ok")

print('--------------------------')
print(list_b)
print(list_t)
print(test1.list_a)

print('--------------------------')
test1.change_list()
print(list_b)
print(list_t)
print(test1.list_a)

print('--------------------------')
test1.change_list()
print(list_b)
print(list_t)
print(test1.list_a)

print(list_b)
print(list_t)
print(test1.list_a)

print(‘--------------------------’)
test1.change_list()
print(list_b)
print(list_t)
print(test1.list_a)


![image-20231109171434258](https://img-blog.csdnimg.cn/img_convert/f1d3c81db93d074450faf0fb55b922ed.png)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值