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

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

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

相关文章
|
8月前
浅学指针(2)数组函数传值调用
浅学指针(2)数组函数传值调用
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
65 0
|
8月前
|
存储 程序员 C语言
语言数组元素作函数实参
语言数组元素作函数实参
55 0
|
8月前
|
存储 Java 编译器
Java字符串变量声明与赋值的常见面试题——完整剖析
Java字符串变量声明与赋值的常见面试题——完整剖析
43 1
Python函数每日一讲 - frozenset集合函数入门及实例
Python函数每日一讲 - frozenset集合函数入门及实例
|
存储 小程序 编译器
数组传参不理解?(数组传参的本质)
数组传参不理解?(数组传参的本质)
113 0
|
前端开发 定位技术 数据格式
在嵌套函数中实现条件判断获取数组传值的方法
在嵌套函数中实现条件判断获取数组传值的方法
84 0
数组作为函数参数传参&数组名到底代表什么意义?
数组作为函数参数传参&数组名到底代表什么意义?
|
程序员 C语言
一维数组传参问题
一维数组传参问题
104 0
python函数不能传可变参数
python函数不能传可变参数