可变类型和不可变类型的传参 | 学习笔记

简介: 快速学习可变类型和不可变类型的传参,介绍了可变类型和不可变类型的传参系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Python 入门 2020年版可变类型和不可变类型的传参】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10336


可变类型和不可变类型的传参

 

内容介绍:

一、可变类型和不可变类型的传参


一、可变类型和不可变类型的传参

def test(a ) :

a = 100

def demo(nums ) :

nums[o] = 10

x = 1

test(x)

print(X)

运行结果:1

y = [3,5,6,8,2]

demo(y)

print(y)

运行结果:[10,5,6,8,2]

X 传给 a,大方框是一个大内存,有一个地方保存了数据是1,a=1

不对,先是 x=1,a 也指向1,同时指向1的这块内存空间,1具有地址,a 想要修改1上的地址数据,之前讲过,int 类型的数据不允许修改,不可变类型要是修改,会发生一种新的情况,会产生一个新的内存空间,内存空间存储的是100,a 再指向100,这就是内存地址的传递情况,如下图所示。

image.pngdef test(a):

('修改前 a 的内存地址 ex%’% id(a))

a = 100

print('修改a的内存地址ex%’% id(a))

def demo( nums ) :

nums[0] = 10

x=1

print('调用前x 的内存地址 ex%’% id(x))

test(x)

print('调用后 x 的内存地址 ex%’% id(x))

print(x)

运行结果:

调用前 x 的内存地址 O×7FFBC4617110

修改前 a 的内存地址 Ox7FFBC4617110

修改后 a 的内存地址 Ox7FFBC4617D70

调用后 x 的内存地址 Ox7FFBC4617110

1

[10,5,6,8,2]

Def demo‘(nums)

Print('修改前 nums 的内存地址0x%’% id(nums))

Nums[0] =10

Print('修改nums 的内存地址0x%’% id(nums))

Y=[3,5,6,8,2]

print('调用前y内存地址0x%’% id(y))

demo(y)

print('调用后y的内存地址0x%’% id(y))

print(y)

列表是一个可变的数据类型,y 指向内存空间,demo(y会将 y 传递给 nums,即nums=y,nums 指向 y,将第零个数据修改成10以后,打印 y 之后数据就会改变,如下图所示。

image.png运行结果:

调用前 y 的内存地址0x12445E65208

修改前 nums 的内存地址 Ox12445E65208

修改后 nums 的内存地址0x12445E65208

调用后 y 的内存地址 Ox12445E65208

[10, 5,6,8,2]

四个内存地址都是相同的。

如果还是不清楚可以 crtlC 复制代码到网站:

www.pythontutor.com,有个动态效果图可以查看,可以剪切刚才的代码来查看,这个网站国内可以访问,删掉打印的东西,

image.png

可以运行 next 的下一步,x=1,a=1,运行完之后 a=100

查看 y,nums 也指向这个空间,

修改 nums 之后,y 的第零个数据就改了,

image.png

相关文章
|
2月前
【函数】数组做函数参数
【函数】数组做函数参数
元组作为函数参数
在 Julia 中,可以将元组作为函数参数。例如,`testFunc` 函数接收元组 `options`。当调用函数如 `testFunc(1, 2, 3; options...)`,元组内的值(如 `b=200`, `c=300`)会被用于函数调用。如果在元组后指定参数(如 `b=1000_000`),则会覆盖元组中的相应值。示例展示了元组参数如何与默认值和显式参数交互,影响最终输出。
|
5月前
|
存储 编译器 C语言
数组元素作为函数实参
数组元素作为函数实参
32 0
|
5月前
|
编译器 C语言
多维数组名作函数参数
多维数组名作函数参数
28 0
|
5月前
|
数据处理 C语言 索引
数组元素作函数实参
数组元素作函数实参
53 0
|
5月前
|
存储 程序员 C语言
语言数组元素作函数实参
语言数组元素作函数实参
37 0
|
5月前
|
存储 索引
数组元素做函数实参
在编程中,数组是一种常见的数据结构,用于存储多个相同类型的元素。函数则是执行特定任务的代码块,可以接收参数并返回结果。当我们将数组元素作为函数的实参时,可以将数组中的特定值传递给函数,以便在函数内部进行处理或计算。本文将介绍数组元素作为函数实参的概念,并附上相应的代码示例
48 0
|
5月前
|
编译器 C语言
【可变参数列表如何可变?】
【可变参数列表如何可变?】
|
11月前
|
Cloud Native Go C++
你以为传切片就是传引用了吗?
你以为传切片就是传引用了吗?
|
存储 小程序 编译器
数组传参不理解?(数组传参的本质)
数组传参不理解?(数组传参的本质)
100 0