列表
对于普通的数据类型如整型,浮点型,布尔值等我就不一一列举了,首先我们来看列表:
sequence = [1,2,3,4] #定义列表,用[]表示,用,分隔
print(sequence) #输出列表
print(sequence[1]) #输出列表指定值,计算机从0开始计数,故1取得是第二个值
#同时取出多个值
print(sequence[1],sequence[3]) #用于不连续
print(sequence[1:3]) #取连续的值可以切片,切片为左闭右开区间,即取1-3的值,不包含3
print(sequence[-1]) #如果我们想取最后一个值而不知道列表长度
print(sequence[-2:]) #如果要取最后两个,后面不能写-1,应为左闭右开,此时可以省略
print(sequence[:2]) #如果从第一个开始切片,0也可以省略
print(sequence[0:-1:2]) #间隔切片,参数分别为起始点,结束点,间隔
print(sequence[::2]) #同上,省略0和-1
#增
sequence.append(5) #追加
sequence.insert(1,1.5) #插入,第一个参数为index,第二个为value
#改
sequence[0] = 2
#删
sequence.remove(2) #根据value删除,若有多个,只删除第一个
del sequence[0] #删除指定index的数据
sequence.pop() #默认删除最后一个
sequence.pop(0) #删除指定index
#查
print(sequence.index(3)) #输出第一个value为3的index
print(sequence.count(3)) #统计列表中value为3的个数
#其他方法
sequence.reverse() #将列表倒序
sequence.sort() #将列表排序,若为字符串,则按ascii排序
sequence2 = ["jack","rose"]
sequence.extend(sequence2) #将其他列表添加到该列表后
sequence3 = sequence.copy() #返回列表的备份
讲到字符串拷贝这里再给大家拓展一点,请看如下代码:
mylist = ["jack","rose",[1,2,3,4]]
mylist1 = mylist.copy()
#此处修改mylist的值,mylist1是否会改变呢?
mylist[0] = "JACK"
mylist[2][1] = "TWO"
print(mylist,mylist1)
大家猜到结果了吗?
[‘JACK’, ‘rose’, [1, ‘TWO’, 3, 4]]
[‘jack’, ‘rose’, [1, ‘TWO’, 3, 4]]
我们发现,jack没变,但是2变成了TWO,这是为什么呢?
因为list的第三个元素是列表,外层列表保存的是他的地址,拷贝的时候也只是把地址拷贝过去,而修改的值是该地址指向的值,故两个都变了;而为什么jack没有变呢?虽然列表也是保存的jack的地址,但是当对第一个元素重新赋值时,并不是改变的jack这个地址中的值,因为字符串时不可变对象,而是重新创建了一个JACK对象,并将其地址保存在了mylist中,但是mylist1中依旧保存的是jack的地址,故没变。
以上就是我对浅拷贝的拙见了,那么如果我想拷贝之后完全独立该怎么办呢?
import copy
mylist = ["jack","rose",[1,2,3,4]]
mylist1 = copy.deepcopy(mylist)
#此处修改mylist的值,mylist1是否会改变呢?
mylist[0] = "JACK"
mylist[2][1] = "TWO"
print(mylist,mylist1)
结果如下:
[‘JACK’, ‘rose’, [1, ‘TWO’, 3, 4]]
[‘jack’, ‘rose’, [1, 2, 3, 4]]
这就完成了深拷贝,我们修改原列表不会在影响到拷贝的列表了。