关于python函数的参数问题(对同一块儿地址的操作)

下面有两份代码一份是python,一份是c++,这里python中的变量连续当作参数传递给函数,而导致结果的变化,实际原因是:list是一个变量指向[],每当调用一次函数也就相当于当前list与test是指向同一对象的变量,每次list向末尾添加一个单词后那么,test所指向的对象的值肯定也变化,跟下面c++这个全局变量目前感觉有点相似。

def add(list = []):
    list.append('end')
    return list
test = ['a', 'v', 'd']
print(add(test))        #output ['a', 'v', 'd', 'end']
print(add(test))        #output ['a', 'v', 'd', 'end', 'end']
print(add())            #output ['end']
print(add())            #output ['end', 'end']
#include <iostream>

using namespace std;

string s = "abc";

string change()
{
    return s += 'a';
}
int main()
{

    cout << change() << endl;

    cout << change() << endl;

    return 0;
}

python中传递的list型变量与参数实际操作的是同一块儿地址。也就是当前list指向的对象[]是可变的,函数中对list进行改变,那么test也相应改变,则见代码:

def add(list = None):
    if list is None:
        list = []
    list.append('end')
    return list
test = ['a', 'v', 'd']
print(add(test))            #output ['a', 'v', 'd', 'end']
print(test)            #output ['a', 'v', 'd', 'end']

对于str这种不可变类型来说,函数中对其的改变不能引起原来变量的变化,因为a和s指向的是两个地址

def add(a):
    a += 'a'
    return a

s = 'abc'
print(add(s))       #output abca
print(s)            #output abc

再看看这个,None是个不变对象,因此这里的两个输出相同

def add(list = None):
    if list is None:
        list = []
    list.append('end')
    return list
print(add())        #output ['end']
print(add())        #output ['end']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值