python slice类型_复合类型Slice python中的list

# GO types Slice

### Author 品茶

> Slice(切片)代表变长的序列,序列中每个元素都具有相同的类型,slice类型写成[]T,T代表slice中元素的类型,slice的语法和数组很像

> 只是没有固定长度而已。

> slice的底层引用一个数组对象,三部分组成:指针、长度(len)、容量(cap),指针指向第一个slice元素对应的底层数组元素的地址,

> 注意slice的第一个元素并不一定就是数组的第一个元素(有可能是切片后的)。

> 长度不能超过容量,容量一般是从slice的开始位置到底层数据的结尾位置。

> 长度:实际元素个数

> 容量:最大可装载的元素个数,超过则对前一个容量*2

多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠

~~~

func main() {

// 定义一个数组

months := [...]string{

1: "January",

2: "February",

3: "March",

4: "Aprill",

5: "May",

6: "June",

7: "july",

8: "August",

9: "September",

10: "October",

11: "November",

12: "December",

}

// 定义一个slice是不需要指定长度的,指定了就是数组

//s := []int{0,1,2,3,4} // 这是slice定义

//s1 := [...]int{0,1,2,3,4} // 数组定义

//s2 := [3]int{1,2,3} // 数组定义

// 切片操作 s[i:j] 0 <= i <= j <= cap(s)

Q1 := months[1:4]

Q2 := months[4:7]

Q3 := months[7:10]

Q4 := months[10:]

Summmer := months[6:9]

fmt.Println(Q2, Q4)

fmt.Println(Q1, Q3)

fmt.Println(Summmer[:20])

// slice不支持直接比较,还是一样需要调用bytes.Equal来进行比较。因为是对底层类型的间接引用(浅拷贝),还是指针值的修改。所以不方便比较

// append 向slice追加元素 注意重新分配内存和copy操作 cap = cap * 2

}

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值