go和python切片的不同
2019独角兽企业重金招聘Python工程师标准>>>
go有切片slice类型,python有列表和元组,这两种语言都有切片操作。
但是它们的切片操作是完全不同的。
首先说第一个,go的切片,其成员是相同类型的,python的列表和元组则不限制类型。
两种语言都有[a:b]这种切片操作,意义也类似,但是go的a、b两个参数不能是负数,python可以是负数,此时就相当于从末尾往前数。
两种语言都有[a:b:c]这种切片操作,意义却是完全不同的。go的c,表示的是容量;而python的c表示的是步长。
但是最大的不同,还是:
python的切片产生的是新的对象,对新对象的成员的操作不影响旧对象;go的切片产生的是旧对象一部分的引用,对其成员的操作会影响旧对象。
究其原因,还是底层实现的不同。
go的切片,底层是一个三元组,一个指针,一个长度,一个容量。指针指向一块连续的内存,长度是已有成员数,容量是最大成员数。切片时,一般并不会申请新的内存,而是对原指针进行移动,然后和新的长度、容量组成一个切片类型值返回。也就是说,go的切片操作通常会和生成该切片的切片共用内存。
不仅是切片,字符串、数组的切片也是一样的,通常会共用内存。
当然也有异常情况,那就是切片时,提供的容量过大,此时会申请新内存并拷贝;或者对切片append超出容量,也会如此。这时,新的切片,才不会和老切片共享内存。(如果你切片/创建时提供的容量小于长度,会panic)
python的列表,其实是个指针数组。当然在下层也会提供一些空位之类的,但基本就是个数组。对它们切片,会创建新的数组,注意,是创建新的数组!python的列表可没有容量的概念。
这其实也体现了脚本语言和编译语言的不同。虽然两个语言都有类似的切片操作;但是python主要目标是方便;go主要目标却是快速(并弥补丢弃指针运算的缺陷)。
转载于:https://my.oschina.net/liudiwu/blog/311830
go和python切片的不同相关推荐
- Python切片(入门7)
转载请标明出处: http://www.cnblogs.com/why168888/p/6407977.html 本文出自:[Edwin博客园] Python切片 1. 对list进行切片 L = r ...
- python切片语法-python切片语法
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 我们怎么能用列表做这个(x )以及这个操作有什么作用?... pytho ...
- python切片语法-彻底搞懂Python切片操作
在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器.理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任意切取目 ...
- python切片语法-Python切片详解
step:正负数均可,其绝对值大小决定了切取数据时的""步长",而正负号决定了"切取方向",正表示"从左往右"取值,负表示&quo ...
- python切片语法-Python字符串切片操作知识详解
python 中关于字符串切片的一个问题 aa[0:6] 表示取 第0,1,2,3,4,5 位的数据 所以是6个 123456 aa[:-1] 表示取开始到倒数第二位的数据 所以也是123456 就像 ...
- python切片语法-详解Python 切片语法
Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片也会让你的代码显得特别Pythonic. 切片的主要声明如下,假设现在有一个list,命名为alist: alist = [0,1 ...
- python切片原理_深度解析Python切片
详解Python 切片语法 Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片也会让你的代码显得特别Pythonic. 切片的主要声明如下,假设现在有一个list,命名为alist ...
- python+[:]+切片_我从C ++到Python的方式:概念上的改变
python+[:]+切片 by asya f 由asya f 我从C ++到Python的方式:概念上的改变 (How I went from C++ to Python: a conceptual ...
- python切片操作的几种格式_【Python杂记】第四篇:序列切片
使用python处理问题的过程中,经常会遇到从某个序列中抽取部分值的情况."切片"操作正是专门用于实现这一目的的方法. 实际上,可以通过单次或多次切片操作实现任意目标值切取.切片操 ...
- python切片操作 当所有数据都省略时_python疑难问题---13、Python切片操作
python疑难问题---13.Python切片操作 一.总结 一句话总结: Python切片操作的核心就是:切片操作的时候先分析step,因为step正负表示方向,再看start_index和end ...
最新文章
- Python3 与 C# 并发编程之~ Net篇
- 边缘计算: 与5G同行,开拓蓝海新市场
- java 原生sql排序 gbk_04-SQLServer的排序规则(字符集编码)
- shell脚本——expect命令
- nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
- 听说,霸都.NET技术社区准备搞线下聚会了?
- js判断ipad还是安卓_最近iPad做电子笔记很流行?综合分析你知道的所有笔记方式。...
- MySQL Miscellaneous Functions(ip uuid方法)
- 【转载】C++ ,C#数据类型对照
- python基础系列教程——Python中的编码问题,中文乱码问题
- otool是mac自带的工具
- 两台局域网内的阿里云服务器传文件
- DS18B20温度传感器使用介绍
- golangci-lint timeout
- thinkpad Fn键设置
- c++语言读取excel文件,C++读取Excel文档(CSV) | C/C++程序员之家
- Linux虚拟机增加sda容量
- 面试测试岗想拿13K,HR说最多能给你10K,一招教你怼死HR?
- 05人月神话读书笔记之一
- 微信小程序全局变量注意这四点,让你轻松玩转全局变量
热门文章
- 大话设计模式笔记 享元模式
- android软件获取系统签名
- 如何在使用摩托罗拉上的RSS阅读器应用进行一次订阅
- cop2000计算机组成原理,COP2000计算机组成原理实验系统
- 序列化与反序列化(1)Serializable —— Java原生态方法
- 过期时间_2020年最新航空里程过期时间及避免过期方法总结
- 内核启动流程—走马观花
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
- 开发工具:Git超全实用技巧,值得收藏!
- 数据库系备份相关知识笔记