Python传不可变对象与可变对象(类似于C++中的值传递与引用传递)

基础知识

  在C与C++中创建函数并修改形参时,若用值传递方式传参数,则实参的值不会改变,若用引用传递方式传参数,则实参的值会相应地改变
  在如下C++程序中,x1与x2是形参,a1与a2是实参,运行程序可发现,修改x1与x2,a1保持不变,a2从0变成1。

//运行环境:
// 操作系统:windows7
// 编程工具:vs2017
// 项目:windows控制台应用程序


#include "pch.h"
#include <iostream>
using namespace std;

int f1(int x1) //值传递
{
	x1 = 1;
	return 0;
};

int f2(int *x2)  //引用传递
{
	*x2 = 1;
	return 0;
};

int main()
{
	int a1, a2;
	a1 = 0;  
	a2 = 0;
	f1(a1);
	cout << "a1 = " << a1 << endl;
	f2(&a2);
	cout << "a2 = " << a2 << endl << endl;
}

运行结果:
在这里插入图片描述

Python传不可变对象与可变对象

  因为在Python中一切皆对象,所以,Python不说值传递与参数传递,而讲传不可变对象与可变对象。其中Python编程没有指针,实现引用传递可通过list列表实现
  在如下Python程序中需要注意:
  1. f1函数传不可变对象, 相当于值传递,修改形参x1不会改变实参a1的值;
  2. f2函数传可变对象,也是值传递,虽然实参a2是list列表,但是在f2函数内并未说明形参x2是list列表,所以修改x2不会改变a2的值;
  3. f3函数传可变对象,相当于引用传递,修改形参x3会改变实参a3的值,因为x3与a3都是list列表。

# 运行环境:
#   操作系统:windows7
#   编程工具:pycharm2018.2
#   开发语言:python3.7


def f1(x1):
    x1 = 1


def f2(x2):
    x2 = 1


def f3(x3):
    x3[0] = 1


a1, a2, a3 = 0, [0], [0]
f1(a1)
f2(a2)
f3(a3)
print(a1, a2, a3)

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34801642/article/details/86644743
今日推荐