python基本数据类型--列表(list)

目录

列表的定义

拼接列表(+)

列表重复操作符(*)

列表的索引和切片

索引

切片

修改列表中元素的值

python内置函数

内置函数len

内置函数min

内置函数max

 内置函数del

列表类内置函数

增加元素

内置函数append

内置函数extend

内置函数insert

删除元素

内置函数pop

内置函数remove

统计某种元素个数

内置函数count

查看元素的索引值

内置函数index

复制列表

内置函数copy

倒转列表

内置函数reverse

排序

内置函数sort

列表 比较运算符

比较运算符(==)

比较运算符(!=)

比较运算符(<)

比较运算符(>)

比较运算符(<=)

比较运算符(>=)

列表 成员运算符

成员运算符(in)

成员运算符(not in)

列表 身份运算符

身份运算符(is)

身份运算符(is not)

要注意内存地址相同的可变对象


列表的定义

        用[]作为边界逗号作为分隔符,可容纳所有对象的数据类型,如:[],[1, "a", 5, 'cd']等等,是可迭代的数据类型,可以被修改。我们可以使用下面2种方式来定义列表。

        第一种:直接使用[]

list1 = [1, 1.1, 'abc']
print(list1)  # [1, 1.1, 'abc']

在一个列表中我们可以放入任何的python对象,包括列表本身。在[]中我们放入了一个整型1,一个浮点型1.1,一个字符串'abc'。如此就形成一个拥有3个元素的列表list1,1为list1的第一个元素,1.1为list1的第二个元素,'abc'为list1的第三个元素。当列表中一个元素也没有时,就是一个空列表。

        第二种,使用list函数

list1 = list('abcd12345')
print(list1)  # ['a', 'b', 'c', 'd', '1', '2', '3', '4', '5']

list函数可以把一个可迭代对象中的每一个元素取出来,生成一个列表。因为字符串是可迭代对象,所以list函数把字符串中的每一个元素都取出来了,生成了列表list1。

拼接列表(+)

        我们可以使用+号来拼接列表。

list1 = list('abc') + [1, 2, 3] + [1.1, 1.2, 1.3]
print(list1)  # ['a', 'b', 'c', 1, 2, 3, 1.1, 1.2, 1.3]

通过使用+号我们可以把多个列表组合成一个列表,并且是上一个列表的最后一个元素接下一个列表的第一个元素。

        还可以通过+=的方式来拼接列表。

list1 = list('abc')
print(id(list1))  # 2426617509888
list1 += [1, 2, 3]
print(id(list1))  # 2426617509888
print(list1)  # ['a', 'b', 'c', 1, 2, 3]

列表list1在使用+=拼接列表[1, 2, 3]后,它的元素右'a'、'b'、'c'3个变成了'a'、'b'、'c'、1、2、3共6个。但是列表是可变的数据类型,所以即使它内部元素发生了变化,它的内存地址还是保持不变。

列表重复操作符(*)

        *号可以把一个列表中的所有元素重复n次,元素的个数变为原来的n倍。

list1 = [1, 2] * 3
print(list1)  # [1, 2, 1, 2, 1, 2]

list1中的元素1和2被重复3次后变成了6个元素1、2、1、2、1、2。

列表的索引和切片

        因为列表是可迭代的,所以列表具有被索引和切片的功能。

索引

        索引就是通过下标的方式去获取可迭代对象中的其中一个元素,需要注意的是下标的值(整形)不能超出可迭代对象的范围。举个例子,请看下面的代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[0])  # 1

        索引分为正序索引和逆序索引。正序索引是从第一个元素开始,第一个元素的下标为0,向后数,每个元素的下标依次递增1。逆序索引是从最后一个元素开始,最后一个元素的下标为-1,向前数,每个元素的下标依次递减1。以列表[1, 2, 3, 'a', 'b', 'c']来举例,我们可以得到如下的索引:

列表[1, 2, 3, 'a', 'b', 'c']中有6个元素,也就是列表的长度为6。正序索引的下标范围是0~5,逆序索引的下标范围是-1~-6,所以list1[0]和list1[-6]都是获取list1的第一个元素1。我们不能用超出索引范围的下标来索引,会报错。如下:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[6])

执行结果如下:

执行结果就报错了,说pythonBase.py文件的第二行print(list1[6])出错了,对列表list1的索引超出了范围。 list1[6]是获取list1的第7个元素,但list1只有6个元素,根本就没有第7个元素,所以python会报错。 

切片

        切片就是索引的高级应用,索引只能获取一个元素,但切片可以获取一个或多个元素,切片的本质就是多次使用索引去获取多个元素。对列表的切片是把索引到的所有元素组成一个列表,再返回这个列表,如果什么元素都没获取到则返回空列表。在切片中下标的值可以超出可迭代对象的索引范围,超出范围部分虽然不会报错,但也获取不到任何值。举个例子,请看下面的代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[0:3])  # [1, 2, 3]

切片和索引一样,也是使用中括号。索引只需要在中括号中写一个下标,但切片是一个范围需要两个下标,并且两个下标之间用冒号隔开,表示从第一个下标到第二个下标范围内的元素。切片的范围是一个半开半闭区间(前闭后开),所以切片范围[0:3]在数学中的范围表示是[0,3),能取到的整数值有0、1、2。因此list1[0:3]表示获取list1中的第一个、第二个和第三个元素,所以执行结果为[1, 2, 3]。

        切片中的下标也可以不写,但冒号一定要写。当我们不写第一个下标时,python默认第一个下标为0;当我们不写第二个下标时,python默认第二个下标为可迭代对象的长度。如下:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[:])  # [1, 2, 3, 'a', 'b', 'c']

我们两个下标都没写,所以python默认的切片范围是[0:6],在数学中的范围表示是[0,6),能取到的整数值有0、1、2、3、4、5。获取到了list1中的所有元素,所以执行结果为[1, 2, 3, 'a', 'b', 'c']。

        当切片的范围超出索引范围时,python不会报错,没有超出范围部分可以正常的获取到值,超出范围的部分没有任何的值。请看如下代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[3:10])  # ['a', 'b', 'c']

切片范围[3:10],在数学中的范围表示是[3,10),能取到的整数值有3、4、5、6、7、8、9。list1[3]的值是'a',list1[4]的值是'b',list1[5]的值是'c',list1[6]、list1[7]、list1[8]、list1[9]都是超出索引范围的,超出范围是没有任何值的。所以执行结果为['a', 'b', 'c']。

        在切片中,我们可以使用步长的方式来间歇性获取可迭代对象中的元素。举个例子,请看下面的代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[0:6:2])  # [1, 3, 'b']

切片[0:6:2]中,0和6我们都知道表示的是切片范围[0:6]。那最后面这个2表示的就是切片的步长了,步长也是用冒号来跟第二个下标隔开的。当我们不写切片步长时,python默认切片步长为1。我们知道,切片的本质就是多次使用索引去获取多个元素。在切片中就需要不断的改变索引的下标去获取元素,步长的意义就是每次索引下标需要递增的值,步长为1时,每获取一次元素下标加1。上面的例子中步长为2,所以是每获取一次元素,下标加2。切片多次使用索引的结果为list1[0]、list1[2]、list1[4],所以执行的结果为[1, 3, 'b']。

        步长为正数时,切片为正序索引。步长为负数时,切片为逆序索引。举个例子,请看下面的代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
print(list1[::-1])  # ['c', 'b', 'a', 3, 2, 1]

切片[::-1]中两个下标都没写,表示的切片范围是[0:6],会获取到list1中的所有元素。步长为-1,表示逆序索引,也就是从最后一个字符开始索引取值,并且每索引一次下标加-1。切片多次使用索引的结果为list1[-1]、list1[-2]、list1[-3]、list1[-4]、list1[-5]、list1[-6],所以执行的结果为['c', 'b', 'a', 3, 2, 1]。

修改列表中元素的值

        因为列表是可变的数据类型,所以列表具有改变元素的能力。当我们想要改变列表中某个元素的值时,可以通过列表索引的方式把这个元素找出来,然后重新给这个元素赋值。请看如下代码:

list1 = [1, 2, 3, 'a', 'b', 'c']
list1[3] = 4
print(list1)  # [1, 2, 3, 4, 'b', 'c']

list1[3]通过索引找到列表list1的第4个元素,这时第4个元素的值为字符串'a',然后我们用赋值运算符=给第4个元素重新赋值为整型4。重新赋值后的第4个元素的值变为了4,所以列表list1打印的结果为[1, 2, 3, 4, 'b', 'c']。

        通过切片的方式可以同时修改多个元素的值。

list1 = [1, 2, 3, 'a', 'b', 'c']
list1[3:6] = [4, 5, 6]
print(list1)  # [1, 2, 3, 4, 5, 6]

python内置函数

len()返回列表的长度(元素个数)
min()返回列表中值最小的元素(所有元素必须有可比性)
max()返回列表中值最大的元素(所有元素必须有可比性)
del删除列表或列表中的元素

内置函数len

        我们向len函数传入一个列表,它会返回这个列表的长度(整型)。

list1 = [1, 2, 3, 'a', 'b', 'c']
number = len(list1)
print(number)  # 6

内置函数min

        我们向min函数传入一个列表,它会返回这个列表中值最小的元素,前提是这个列表中的所有元素必须具有可比性。比如所有的元素全都是数字,全都是字符串。

list1 = [6, 3, 2, 4, 1.1, 5]
value = min(list1)
print(value)  # 1.1
list2 = ['abc', '123', 'Baa', '/_', '?']
print(min(list2))  # /_

如果这个列表中的元素不具有可比性就会报错,例如整型和字符串是不能比较大小的。

list1 = [1, 2, 3, '4', '5', 6]
value = min(list1)
print(value)

执行结果如下:

报错显示类型错误,字符串和整型不能比较大小。

内置函数max

        我们向max函数传入一个列表,它会返回这个列表中值最大的元素,前提是这个列表中的所有元素必须具有可比性。比如所有的元素全都是数字,全都是字符串。

list1 = [6, 3, 2, 4, 1.1, 5]
value = max(list1)
print(value)  # 6
list2 = ['abc', '123', 'Baa', '/_', '?']
print(max(list2))  # abc

 内置函数del

        函数del可以删除列表中的元素,也可以删除整个列表。我们使用索引或切片找出列表中的某一个或多个元素,然后使用del函数就可以把它们从列表中删除。

list1 = [1, 2, 3, 'a', 'b', 'c']
del list1[0]
print(list1)  # [2, 3, 'a', 'b', 'c']
list2 = ['abc', 1, 'x', 66, '233']
del list2[1:3]
print(list2)  # ['abc', 66, '233']

我们还可以使用del删除整个列表,当我们删除整个列表之后,就不能再使用这个列表了,因为这个列表已经不存在了。当我们是用del删除列表后再去打印这个列表就会报错。

list1 = [1, 2, 3, 'a', 'b', 'c']
del list1
print(list1)

执行结果如下:

报错显示变量名错误,变量list1未定义。因为list1已经被整个删除掉了,所以在内存中找不到list1。 

列表类内置函数

        列表类内置函数是在列表这个类型中定义的函数,所以想要使用这些函数,前提是使用的对象必须是一个列表。

增加元素

内置函数append

        我们给append函数传入一个任意的python对象,它可以把这个python对象添加到列表的末尾,变成列表当前的最后一个元素。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.append(4)
print(list1)  # [1, 2, 3, 4]
list1.append(['a', 'b', 1])
print(list1)  # [1, 2, 3, 4, ['a', 'b', 1]]

内置函数extend

        我们给extend函数传入一个列表list_,它可以把list_中所有的元素添加到列表的后方。类似于列表的拼接,可以用来同时给列表增加多个元素。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.extend([4, 'a', []])
print(list1)  # [1, 2, 3, 4, 'a', []]

内置函数insert

        函数insert接收两个参数,第一个参数为索引下标,第二个参数为任意python对象。它会根据传入的索引下标,把传入的python对象插入到列表中索引下标对应的位置。如果当前位置存在元素,则当前位置上的元素以及后面的元素全部向后移动一个位置。如果传入的索引下标超出当前列表的索引范围,则把传入的python对象插入到列表的末尾,变成列表当前的最后一个元素。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.insert(1, 4)
print(list1)  # [1, 4, 2, 3]
list1.insert(5, 6)
print(list1)  # [1, 4, 2, 3, 6]

删除元素

内置函数pop

        我们给pop函数传入一个索引下标,它会删除列表中索引下标对应的元素。并把删除的这个元素返回回来,我们可以使用一个变量来接收也可以不接收。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.pop(1)
print(list1)  # [1, 3]
list2 = ['a', 'b', 5, 'c']
print(list2)  # ['a', 'b', 5, 'c']
value = list2.pop(2)
print(value)  # 5
print(list2)  # ['a', 'b', 'c']

        当不传入参数,默认删除最后一个元素。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.pop()
print(list1)  # [1, 2]

内置函数remove

        remove函数可以删除指定的元素,我们需要删除列表中的那个元素,就给remove函数传递和元素相同的值。

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
list1.remove(1)
print(list1)  # [2, 3]
list2 = ['a', 'b', 'c']
print(list2)  # ['a', 'b', 'c']
list2.remove('c')
print(list2)  # ['a', 'b']

        当要删除的元素不存在时,会报错。

list1 = [1, 2, 3, 'a', 'b', 'c']
list1.remove(4)
print(list1)

执行结果如下:

报错显示值错误,要删除的元素不在列表中。

统计某种元素个数

内置函数count

        count函数可以统计某种元素在列表中的个数,我们需要统计列表中的那种元素,就给count函数传递和元素相同的值。

list1 = [1, 2, 3, 1, 'a', 1, 4, 1]
times = list1.count(1)
print(times)  # 4

第一个元素是1,第4个元素是1,第6个元素是1,第8个元素是1。1在列表list1中有4个,所以统计出来的个数是4。

        当要统计的元素不存在时,返回0。

list1 = [1, 2, 3, 1, 'a', 1, 4, 1]
times = list1.count(7)
print(times)  # 0

查看元素的索引值

内置函数index

        index函数可以返回某个元素的索引下标,我们需要查看列表中的那个元素的索引下标,就给index函数传递和元素相同的值。

list1 = [1, 2, 3, 'a', 'b', 'c']
index = list1.index('a')
print(index)  # 3

        当要查找的元素不存在时,会报错。

list1 = [1, 2, 3, 'a', 'b', 'c']
index = list1.index(4)
print(index)

执行结果如下:

报错显示值错误,4不在列表中。

复制列表

内置函数copy

        copy函数可以复制当前列表,并返回一个复制列表,我们需要用一个变量来接收返回回来的复制列表。

list1 = [1, 2, 3, 'a', 'b', 'c']
list2 = list1.copy()
print(list1)  # [1, 2, 3, 'a', 'b', 'c']
print(list2)  # [1, 2, 3, 'a', 'b', 'c']

倒转列表

内置函数reverse

        reverse函数可以把列表中元素的顺序倒转过来。

list1 = [1, 2, 3, 'a', 'b', 'c']
list1.reverse()
print(list1)  # ['c', 'b', 'a', 3, 2, 1]

排序

内置函数sort

        sort函数可以对列表排序,前提是列表中所有的元素必须具有可比性。比如所有的元素全都是数字,全都是字符串。sort函数默认对列表进行升序排序(从小到大排序)。

list1 = [4, 2, 5, 1, 3, 7, 6]
list1.sort()
print(list1)  # [1, 2, 3, 4, 5, 6, 7]

        当我们想要进行降序排序时(从大到小排序),可以使用关键字参数reverse。关键字参数reverse接收一个bool值(True或者False),用来控制排序的方式是升序还是降序。当reverse=True时为降序,当reverse=False时为升序。

list1 = [4, 2, 5, 1, 3, 7, 6]
list1.sort(reverse=True)
print(list1)  # [7, 6, 5, 4, 3, 2, 1]
list1.sort(reverse=False)
print(list1)  # [1, 2, 3, 4, 5, 6, 7]

        sort函数还有一个关键字参数key,key接收一个函数。当我们使用key=function时,sort会把这个function作用于所有的元素,通过function作用后的值的大小来对元素排序。这个地方初学者看不懂的话没事,等我们后面学到更多的知识点再回来看它就好理解了。

def square(number: int):  # 定义一个名为square的函数,接收一个参数number,声明参数类型为整型
    """
    求一个整数的平方
    
    :param number: 一个整数
    :return: 这个整数的平方
    """
    number **= 2  # 通过求幂赋值运算符,求出number的平方后把结果重新赋值给number
    return number  # 返回number


list1 = [4, 2, -5, 1, 3, 7, 6]
list1.sort(key=square)
print(list1)  # [1, 2, 3, 4, -5, 6, 7]
list1.sort()
print(list1)  # [-5, 1, 2, 3, 4, 6, 7]

我们用关键字key接收函数square,sort把square作用于每一个元素,就是把每一个元素当作参数传入square函数中进行计算。对4的作用返回16,对2作用返回4,对-5作用返回25,对1作用返回1,对3作用返回9,对7作用返回49,对6作用返回36。通过作用后的值的大小来给元素排序为[1, 2, 3, 4, -5, 6, 7],正常情况排序为[-5, 1, 2, 3, 4, 6, 7]。

列表 比较运算符

        我们一般不使用比较运算符去比较列表的大小,因为这没有什么意义,我们常用比较运算符来比较两个列表的值是否相等。列表是具有比较大小的功能的,两个列表比较大小时,首先比较两个列表的第一个元素,第一个元素值大的列表大;如果第一个元素的值相等,就比较第二个元素,第二个元素值大的列表大;如果第二个元素的值相等,则判断第三个...依此类推。列表比较大小的前提是,参与比较的元素具有可比性,如果一个元素是整型,一个元素是字符串则没法比较,python会报错。

比较运算符(==)

        ==用于判断两个列表是否相等,如果相等返回True,不相等返回False。

list1 = [4, 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 == list2)  # False
list3 = [1, 'a', 3.3, [3]]
list4 = [1, 'a', 3.3, [3]]
print(list3 == list4)  # True

比较运算符(!=)

        !=用于判断两个列表是否不相等,如果不相等返回True,相等返回False。

list1 = [4, 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 != list2)  # True
list3 = [1, 'a', 3.3, [3]]
list4 = [1, 'a', 3.3, [3]]
print(list3 != list4)  # False

比较运算符(<)

        <用于判断左边的列表是否小于右边的列表,如果小于返回True,大于或等于返回False。

list1 = ['4', 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 < list2)  # True
list3 = [1, 'a', 3.3, [3]]
list4 = [1]
print(list3 < list4)  # False
list5 = [1, 'a', 1]
list6 = [1, 'a', 1]
print(list5 < list6)  # False

列表list1和list2的第一个元素都是字符串,所以它们有可比性。字符'4'的ASCⅡ值小于字符'a'的ASCⅡ值,所以list1小于list2。列表list3和list4的第一个元素都是整型1,第一个元素相等了,只能比较第二个元素。但是list4没有第二个元素,有总是大于无的,所以list3大于list4。list5和list6中每一个元素都是相等的,所以list5等于list6。

比较运算符(>)

        >用于判断左边的列表是否大于右边的列表,如果大于返回True,小于或等于返回False。

list1 = ['4', 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 > list2)  # False
list3 = [1, 'a', 3.3, [3]]
list4 = [1]
print(list3 > list4)  # True
list5 = [1, 'a', 1]
list6 = [1, 'a', 1]
print(list5 > list6)  # False

比较运算符(<=)

        <=用于判断左边的列表是否小于等于右边的列表,如果小于或等于返回True,不小于且不等于(大于)返回False。

list1 = ['4', 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 <= list2)  # True
list3 = [1, 'a', 3.3, [3]]
list4 = [1]
print(list3 <= list4)  # False
list5 = [1, 'a', 1]
list6 = [1, 'a', 1]
print(list5 <= list6)  # True

比较运算符(>=)

        >=用于判断左边的列表是否大于等于右边的列表,如果大于或等于返回True,不大于且不等于(小于)返回False。

list1 = ['4', 2, -5, 1, 3, 7, 6]
list2 = ['a', 'b', 1, 2.3]
print(list1 >= list2)  # False
list3 = [1, 'a', 3.3, [3]]
list4 = [1]
print(list3 >= list4)  # True
list5 = [1, 'a', 1]
list6 = [1, 'a', 1]
print(list5 >= list6)  # True

列表 成员运算符

        成员运算符是用来判断某个python对象是否跟某个序列(可迭代对象)中的某个元素的值相同。也可以理解成是否在这个列表中,但其实看的还是元素的值是否有和这个python对象的值一样的情况。

in判断某个对象是否在列表中,在则返回True,不在则返回False
not in判断某个对象是否不在列表中,不在则返回True,在则返回False

成员运算符(in)

        当某个python对象跟某个序列(可迭代对象)中的某个元素的值相同时,返回True;找不到相同值的元素时,返回False。

list1 = [4, 2, -5, 1, 3, 7, 6, [1, 2]]
print([1, 2] in list1)  # True
list2 = ['a', 'b', 1, 2.3, ['a', 1, 3, 2]]
print(5 in list2)  # False

列表list1中最后一个元素的值是一个列表[1, 2],所以[1, 2] in list1返回True。列表list2中没有元素的值为5,所以5 in list2返回False。

成员运算符(not in)

        当某个python对象在某个序列(可迭代对象)中找不到值相同的元素时,返回True;找到相同值的元素时,返回False。

list1 = [4, 2, -5, 1, 3, 7, 6, [1, 2]]
print(2 not in list1)  # False
list2 = ['a', 'b', 1, 2.3, ['a', 1, 3, 2]]
print(5 not in list2)  # True

列表list1中第二个元素的值是2,所以2 not in list1返回False。列表list2中没有元素的值为5,所以5 not in list2返回True。

列表 身份运算符

        身份运算符可以判断两个列表的内存地址是否一致。因为列表是可变的数据类型,所以即使两个列表的值是相等的,它们的内存地址也可能不同。

   is判断左右两边的内存地址是否相同,相同返回True,否则返回False
is not判断左右两边的内存地址是否不同,不同返回True,否则返回False

身份运算符(is)

        is用于判断左右两个对象的内存地址是否相同,如果相同返回True,不同返回False。举个例子,请看下面的代码:

list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(id(list1))  # 1685687177280
print(id(list2))  # 1685687494336
print(list1 is list2)  # False

list1和list2是相等的,但它们的内存地址不同。它们存储在内存中不同的地方,这就是可变数据类型的特性。

        我们使用列表类内置函数copy来复制列表,复制出来的列表和原列表内存地址也不相同。

list3 = [1, 'a', 3.3, [3]]
list4 = list3.copy()
print(id(list3))  # 2658515329536
print(id(list4))  # 2658519922560
print(list3 is list4)  # False

        通过赋值运算符(=)赋值出来的列表内存地址是相同的。

list5 = [1, 'a', 1]
list6 = list5
print(id(list5))  # 2465201371776
print(id(list6))  # 2465201371776
print(list5 is list6)  # True

身份运算符(is not)

        is not用于判断左右两个对象的内存地址是否不同,如果不同返回True,相同返回False。举个例子,请看下面的代码:

list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(id(list1))  # 2156988928128
print(id(list2))  # 2156989245120
print(list1 is not list2)  # True
list3 = [1, 'a', 3.3, [3]]
list4 = list3.copy()
print(id(list3))  # 2156988965376
print(id(list4))  # 2156989298880
print(list3 is not list4)  # True
list5 = [1, 'a', 1]
list6 = list5
print(id(list5))  # 2156989299200
print(id(list6))  # 2156989299200
print(list5 is not list6)  # False

要注意内存地址相同的可变对象

         当两个列表的内存地址相同时,我们修改其中任意一个列表,另一个列表也会跟着改变。

list1 = [1, 2, 3]
list2 = list1
list1.append(4)
print(list1)  # [1, 2, 3, 4]
print(list2)  # [1, 2, 3, 4]
list2.remove(1)
print(list1)  # [2, 3, 4]
print(list2)  # [2, 3, 4]

两个对象的内存地址相同时,其中一个对象修改了内存中的值。另一个对象去相同的内存地址取值,取出来的就是修改后的值。

  • 17
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值