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

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

开发者学堂课程【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

相关文章
|
6月前
浅学指针(2)数组函数传值调用
浅学指针(2)数组函数传值调用
|
3天前
解构赋值时,如果数组元素的值是函数,如何进行解构赋值?
解构赋值对于数组中函数元素的处理提供了一种简洁明了的方式,能够方便地将函数提取到变量中进行后续的调用和操作,使代码更加清晰和易于理解。
11 4
|
4天前
解构赋值时如果数组元素的值是嵌套对象,如何进行解构赋值?
【10月更文挑战第30天】可以灵活地对数组中包含嵌套对象的元素进行解构赋值,根据具体的需求提取出所需的值,从而使代码更加简洁、清晰,提高代码的可读性和可维护性。
|
编译器 C++
指针进阶 - 2(数组参数和指针参数)
指针进阶 - 2(数组参数和指针参数)
73 0
元组作为函数参数
在 Julia 中,可以将元组作为函数参数。例如,`testFunc` 函数接收元组 `options`。当调用函数如 `testFunc(1, 2, 3; options...)`,元组内的值(如 `b=200`, `c=300`)会被用于函数调用。如果在元组后指定参数(如 `b=1000_000`),则会覆盖元组中的相应值。示例展示了元组参数如何与默认值和显式参数交互,影响最终输出。
|
6月前
|
存储 程序员 C语言
语言数组元素作函数实参
语言数组元素作函数实参
41 0
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
59 0
|
6月前
数组参数和指针参数
数组参数和指针参数
33 2
|
12月前
|
Cloud Native Go C++
你以为传切片就是传引用了吗?
你以为传切片就是传引用了吗?
|
存储
04-数组和元祖数据类型
04-数组和元祖数据类型
69 0
下一篇
无影云桌面