栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python可变不可变类型与go的值类型与引用类型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python可变不可变类型与go的值类型与引用类型

python可变不可变与go的值类型与引用类型对比 python 可变与不可变类型

在python中,有一句话叫做一切皆对象,一切皆引用,因此在python中,其实不存在真正意义上的基础数据类型,无论是列表,字符串,数值类型,实际上都是一个个类所产生的对象。这也是为什么python中 整型 没有长度限制,能够无限大的原因。

也正因为python中一切皆对象,python 底层存储值的方式,都是 变量名 -> 内存地址,内存地址-> 数据,这种引用传递的方式。

如果python没有做任何处理,按理来说,不管是列表还是数字,字符串,修改值时,内存地址应该都是不变的。但是仅有集合,列表,字典三种类型数据修改值而内存地址不改变的数据类型,在python中称为可变类型

但是,实际上,如果在python中如果修改的是 数值,字符串,元组,布尔类型的数据,值改变,内存地址也会跟着变,这一类在python中称之为不可变类型数据

这一点,可以在函数传参中,可以更加清楚的看出来,可变类型传入,在函数内部名称空内修改,全局的数据也会跟着修改,但是不可变类型,在内部空间修改,却不会影响到全局变量

所以,其实在python中,这就很古怪,因此真正明白的人,都不会去说python函数传参是引用传递,还是值传递,而是讲的是一切皆引用,因此python作者才分出来可变与不可变类型。所以看到这,你就是明白人了

go 的值类型与引用类型

而在go中,两者就有很好的区分。go中的数据类型可以分为值类型和引用类型两大块

值类型包括: 所有的整型、浮点型、bool型、string型、数组和struct类型

值类型的特点是变量直接存储值,内存通常在 栈(stack) 中分配

引用类型包括: 指正、slice、map、chan、interface

引用类型的特点,变量存储的是一个地址,这个地址对应的空间才真正存储的数据,内存分配通常在 堆(heap) 上分配,当没有任何变量引用这个地址的时候,该地址对应的数据空间会被GC回收 -> 这点和 python 不能说是一模一样,只能说是 别无二样

go语言中的参数传递是 copy传递,把变量赋值一份给函数,值类型,传入函数,修改后,不会影响原来的值,引用类型,复制这个引用,传入(指向没变)函数,修改后,会影响原来的值

补充: 不论是在go中还是在python中,函数都是一等公民,能够直接当做变量值传递给变量名。也可以当做函数参数使用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号