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切片的不同相关推荐

  1. Python切片(入门7)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407977.html 本文出自:[Edwin博客园] Python切片 1. 对list进行切片 L = r ...

  2. python切片语法-python切片语法

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 我们怎么能用列表做这个(x )以及这个操作有什么作用?... pytho ...

  3. python切片语法-彻底搞懂Python切片操作

    在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器.理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任意切取目 ...

  4. python切片语法-Python切片详解

    step:正负数均可,其绝对值大小决定了切取数据时的""步长",而正负号决定了"切取方向",正表示"从左往右"取值,负表示&quo ...

  5. python切片语法-Python字符串切片操作知识详解

    python 中关于字符串切片的一个问题 aa[0:6] 表示取 第0,1,2,3,4,5 位的数据 所以是6个 123456 aa[:-1] 表示取开始到倒数第二位的数据 所以也是123456 就像 ...

  6. python切片语法-详解Python 切片语法

    Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片也会让你的代码显得特别Pythonic. 切片的主要声明如下,假设现在有一个list,命名为alist: alist = [0,1 ...

  7. python切片原理_深度解析Python切片

    详解Python 切片语法 Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片也会让你的代码显得特别Pythonic. 切片的主要声明如下,假设现在有一个list,命名为alist ...

  8. python+[:]+切片_我从C ++到Python的方式:概念上的改变

    python+[:]+切片 by asya f 由asya f 我从C ++到Python的方式:概念上的改变 (How I went from C++ to Python: a conceptual ...

  9. python切片操作的几种格式_【Python杂记】第四篇:序列切片

    使用python处理问题的过程中,经常会遇到从某个序列中抽取部分值的情况."切片"操作正是专门用于实现这一目的的方法. 实际上,可以通过单次或多次切片操作实现任意目标值切取.切片操 ...

  10. python切片操作 当所有数据都省略时_python疑难问题---13、Python切片操作

    python疑难问题---13.Python切片操作 一.总结 一句话总结: Python切片操作的核心就是:切片操作的时候先分析step,因为step正负表示方向,再看start_index和end ...

最新文章

  1. Python3 与 C# 并发编程之~ Net篇
  2. 边缘计算: 与5G同行,开拓蓝海新市场
  3. java 原生sql排序 gbk_04-SQLServer的排序规则(字符集编码)
  4. shell脚本——expect命令
  5. nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
  6. 听说,霸都.NET技术社区准备搞线下聚会了?
  7. js判断ipad还是安卓_最近iPad做电子笔记很流行?综合分析你知道的所有笔记方式。...
  8. MySQL Miscellaneous Functions(ip uuid方法)
  9. 【转载】C++ ,C#数据类型对照
  10. python基础系列教程——Python中的编码问题,中文乱码问题
  11. otool是mac自带的工具
  12. 两台局域网内的阿里云服务器传文件
  13. DS18B20温度传感器使用介绍
  14. golangci-lint timeout
  15. thinkpad Fn键设置
  16. c++语言读取excel文件,C++读取Excel文档(CSV) | C/C++程序员之家
  17. Linux虚拟机增加sda容量
  18. 面试测试岗想拿13K,HR说最多能给你10K,一招教你怼死HR?
  19. 05人月神话读书笔记之一
  20. 微信小程序全局变量注意这四点,让你轻松玩转全局变量

热门文章

  1. 大话设计模式笔记 享元模式
  2. android软件获取系统签名
  3. 如何在使用摩托罗拉上的RSS阅读器应用进行一次订阅
  4. cop2000计算机组成原理,COP2000计算机组成原理实验系统
  5. 序列化与反序列化(1)Serializable —— Java原生态方法
  6. 过期时间_2020年最新航空里程过期时间及避免过期方法总结
  7. 内核启动流程—走马观花
  8. android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
  9. 开发工具:Git超全实用技巧,值得收藏!
  10. 数据库系备份相关知识笔记