小知识:①字符串的定义可以使用单引号、双引号、三引号,仅从定义层面来说,并无不同。变量名是由字母、数字、下划线组成的,若字符串不加引号,会被python认为是变量名。②字符串是有序、不可变类型。有序则字符串可遍历,不可变则字符串的任意 *** 作都不改变原字符串。
- 切片——[起始:终止:步长],当步长为负数时,起始索引应该大于终止索引。字符串取反[ : : -1]。字符串的切片 *** 作不会改变原字符串内容。
-
strip(chars)——移除字符串左右两侧的符号,若不传入chars,则去除字符串左右两侧空格,字符串中间的符号并不会去除。lstrip与rstrip分别表示去除字符串左侧和右侧的符号。
-
split(sep,maxsplit)——将字符串按照某种分隔符(sep)分割,得到一个列表,列表的元素是分割后的字符串。不传入参数,则默认分隔符是空格。rsplit是从右向左切分,当切分次数(maxsplit)传入时,两个函数会有区分。
-
format()——字符串的格式化输出,可以按位置传参,也可以按key:value传参。
-
join()——把可迭代对象中的字符串按照某种分隔符进行拼接,得到一个拼接字符串。
-
replace()——用新的字符替代旧的字符
isdigit()——判断字符串是否由纯数字组成
capitalize()——字符串首字母大写
title()——字符串中每个单词的首字母都大写
小知识:①列表是有序、可变类型。②类型转换:list()。参数为可被for循环遍历的类型(字符串、列表、字典),底层原理就是for循环。
- 切片—— *** 作与字符串类似,为浅拷贝。
-
insert(index,object)——在索引(index)前插入对象(object)。该 *** 作改变原列表。
-
append(object)——在列表后面追加对象(object)。
- extend(iterable)——在列表后面添加多个元素。传入参数可被for循环遍历,该函数底层原理就是for循环。
-
del()——删除列表中的元素,或者删除整个列表,无返回值。
-
pop(index)——删除列表指定索引的值,并返回该值。默认索引为-1,即删除列表最后面的值。
- remove(value)——删除列表中给定的值(value)。
- count(value)——统计列表中出现值(value)的次数
clear()——清除列表的所有元素
index(value)——返回值(value)第一次出现的索引
reverse()——颠倒列表元素的顺序
sort(key, reverse)——列表元素排序。排序原则是大小。字符比较大小按照ASCII码,字符串比较大小按照对应位置字符比较大小。列表比较大小同字符串,但两个列表对应位置元素类型应相同。
十进制 ----> 二进制 bin()
十进制 ----> 八进制 oct()
十进制 ----> 十六进制 hex()
-
可变类型与不可变类型
可变类型:当值改变时,内存地址不发生变化。如:列表、字典。列表、字典中的元素可以改变。但其无本身的id不发生变化。不可变类型:当值发生改变时,内存地址也发生改变。如:整型、浮点型、布尔值。int、float、str是一个整体,无法改变其中的值。当值改变时,相当于创建一个新值,开辟新的内存。故他们的任何 *** 作都与本来的值无关。
-
列表在内存中的存储
内存开辟一个空间2250332600832给列表,列表的内存地址保存的是列表索引(0,1,2)及其索引值(1,2,3)所对应的内存地址(140720426133280,140720426133312,140720426133344)。
-
浅拷贝与深拷贝(以列表为例)
浅拷贝:把原列表第一层元素的内存地址拷贝一份。方法为 .copy( )
如上例所示,list1列表的第一、二个元素是整型,第三个元素是一个列表(取名为list3),list3的两个元素都是整型。当调用list1.copy( )方法时,开辟新的内存空间,与list2关联。故list1和list2的id不同。当修改list1的第一个元素,将1改成11时,由于整型是不可变类型,故开辟新的内存,将此内存地址更新为list1的第一个元素的内存地址,list2的第一个元素的内存地址不变,故list1第一个元素为11,list2的第一个元素仍然是1。当修改list1中list3的第一个元素时,list3第一个元素的内存地址改变,但是list3本身的地址未被改变,故list1和list2中的list3的id是一样的。list1和list2中的list3的第一个元素都被改变。简单来说:当列表中含有可变类型的元素时,浅拷贝得到的列表中的元素有可能随着原列表的改变而改变。
深拷贝:拷贝列表中元素时,元素若是不可变类型,则直接拷贝元素的内存地址;元素若是可变类型,则开辟一个新的内存地址。方法:引入copy,copy.deepcopy( )。
在本列中,深拷贝与浅拷贝的区别在于,浅拷贝list3本身的id不变,深拷贝list3本身的id改变,故改变list1中list3的第一个元素时,list1改变,list2不变。因为此时list1中list3和list2中list3内存地址不同,不再是同一个list3了。
注:
此种情况下,仅是将list1的内存地址与list4关联。当list1改变时,list4也会改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)