建设银行锦州分行网站,mysql做镜像网站,每天看七个广告赚40元的app,wordpress更改ip后登录密码错误2019独角兽企业重金招聘Python工程师标准 go有切片slice类型#xff0c;python有列表和元组#xff0c;这两种语言都有切片操作。 但是它们的切片操作是完全不同的。 首先说第一个#xff0c;go的切片#xff0c;其成员是相同类型的#xff0c;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