Python中的列表(可变类型数据与不可变类型数据的区别)

您所在的位置:网站首页 c可变数据类型是什么 Python中的列表(可变类型数据与不可变类型数据的区别)

Python中的列表(可变类型数据与不可变类型数据的区别)

2024-07-03 17:59| 来源: 网络整理| 查看: 265

可变与不可变的区别 #可变数据类型

#列表(list)是可变的,可以通过索引来修改列表中的元素,但列表对象的内存地址不会改变。 # 对于可变对象,如列表和字典等,其内部元素的值是可以修改的。当你修改可变对象的元素时, # 实际上是在原始对象的内存空间内进行修改,而不是创建一个新的对象。因此,对于一个可变对象,其内部元素的内存地址是固定的,而整个对象的内存地址是不固定的。 # 如果对一个可变对象的元素进行修改,虽然该元素的内存地址不会发生改变,但整个对象的内存地址可能会发生变化,因为其它因素(如内存分配器、垃圾回收机制)也可能影响对象的内存地址。 # 举个例子,假设有一个列表 a,其中包含了另一个可变对象 b 的引用。当你修改 b 中的某个元素时,b 对应的内存地址不会发生变化,但是 a 对应的内存地址可能会发生变化,因为此时 a 所引用的可变对象已经发生了改变。总之,对于可变对象,其内部元素的内存地址是固定的,但整个对象的内存地址可能会发生变化,具体取决于对象本身的状态以及运行时条件。

# id()此方法查找给对象的内存地址 b = [1,2,3,4] print(id(b)) a = [1,2,3,4,5,6,b] print(id(a)) b.append(5) print(id(b)) print(id(a)) # 不可变类型数据:

# 对于不可变对象(如整数、字符串和元组),它们的值不能被修改。当你对不可变对象进行操作时,实际上是创建一个新的对象并将其引用赋给相应的变量,而原始对象的值保持不变。对于不可变对象,其内存地址与其值是一一对应的。也就是说,不可变对象的内存地址是固定的,并且不会发生改变。这意味着,无论你对不可变对象进行怎样的操作,它们的内存地址都会保持不变。 # 举个例子,如果你有一个整数变量 a,其值为 10,那么 a 的内存地址在整个程序运行期间都是固定的。即使你修改了 a 的值,比如将其赋值为 20,实际上是创建了一个新的整数对象,并将其引用赋给了 a,而原始的整数对象 10 的内存地址保持不变。因此,对于不可变对象,其内存地址与其值是紧密联系的,并且不会随着对象的操作而发生变化。这种不可变性使得不可变对象在多线程环境下更安全,也有助于节省内存空间。

# a = 10 # print(id(a)) # print(id(10)) # a = 20 # print(id(a)) # print(id(20)) # print(id(10)) #创建列表的方法:   a1 = [] a1 = list()

# 将任意元素放入[]内,元素之间使用逗号隔开 # 参数为空就是空列表,空列表为假。 # 使用list()创建列表时不为空的列表只能存储可迭代(可以使用for遍历)的元素 # 遍历列表时不可以直接删除元素,删除之后会影响后续元素索引。如果在遍历时要删除元素,可以倒序遍历列表

# list()中的字符串内容会被切割成单个字符的元素 d11 = list('asbdkhdu13565scas') print(d11) # 假 : [], False, 0, None, ""

# list 列表是由一系列按照特定顺序排列的元素组成,用[]表示列表。 # 元素之间可以没有任何关系,元素之间用逗号(,)分割 # 列表是有序集合,要访问列表中的任何数据只需要将该元素的索引告诉python即可 # python为访问最后一个元素提供了一个特殊语法,将索引指定为-1,可让python # 返回最后一个列表元素(最后一个元素的索引是-1)

name = ['李四', '李三','王旭', 'Jack', 'Rose', 135415,'李三','刘若兰','赵亮','李三'] print(id(name[0])) print(name[-1]) # 添加元素的方法

# append()方法:只能将元素添加至列表末尾,此方法不会对列表中其他元素产生影响 # insert()方法:可以将要添加的元素插入到任何位置,此方法会对列表的其他元素产生影响 # 执行insert()方法会将插入位置(包括插入位置)以后的元素全部后移一位 # extend(iterable)方法:只能将可迭代内容依次添加至列表末尾

name.append('赵柯') print(name[-1]) name.insert(4, '刘青町') print(name) # 删除元素的方法

# pop()方法:可以删除列表中任意位置的元素,前提是要知道它在列表中的索引,默认可以删除 # (弹出)列表末尾的元素,并让你可以使用它的值。术语弹出(pop) # 可以理解为列表像一个栈,删除列表末尾元素相当于弹出栈顶元素 # pop可以将任意位置的元素弹出 # del()方法:可以删除列表中任意位置的元素,前提是要知道它在列表中的索引 # 此方法只执行删除操作,不会保留删除元素的值 # clear()方法:清空指定列表的所有元素,变为空列表 # remove()方法:当你知道列表中元素值而不知道索引值时可以使用该方法,它只能删除一个元素 # 若删除的元素不存在则会报错 # 若列表中存在多个同样值的元素需要使用循环来判断是否删除了所有这样的值 # pop()与del()方法之间如何选择,当你只是删除列表元素,且以后也不再会使用该元素, # 使用del()方法,如果你要删除该元素,还要继续使用它,就是用pop()  

delete_name = name.pop() print(delete_name) print(name) # 错误的 delete_name1 = name.del(2) del name[2] print(name) # remove()方法,只会执行一次。要想彻底删除列表中的指定的重复元素,可以搭配while循环来实现 name.remove('李四')

# 删除列表中的重复元素的方法

while '李三' in name: name.remove('李三') print(name) print(name) # 列表排序的方法

# sort()方法:永久性的改变列表元素的排列顺序,默认升序,sort(reverse=True)按照从大到小排序 # sorted()方法:暂时性的按照你特定的排序规则排序,同时还不影响它们在列表中的原始排列顺序 # len()方法可以计算出列表的长度 # reverse(): 永久性的反转列表元素的排列顺序,默认从小到大排列,reverse=True表示按照从大到小排序

light = ['Abort', 'Aqult', 'Sound' 'Heeli', 'Beets', 'Treaw'] print(light) light.sort(reverse=True) # reverse=True表示按照从大到小排序 print(light) for i in light: print(i.lower()) light.reverse() print(light)

# 例题1.将前10个整数的平方加入到一个列表中

squares = [] for value in range(1, 11): squares.append(value ** 2) print(squares) # 对数字列表的简单统计计算 # sum():计算和。 min():最小值。 max():最大值 print(f'列表的和是{sum(digits)},列表中的最大值是{max(digits)},列表中最小值是{min(digits)}') ​ digits = [12, 58, 69, 1, 35, 6, 47, 52, 1, 3] digits.sort() print(digits) print(sum(digits)) print(max(digits)) print(min(digits)) #count():计算某个元素出现的次数 #index():根据元素找对应的索引,可以设置起始索引和终止索引,找不到报错 digits = [12, 58, 69, 1, 35, 6, 47, 52, 1, 3] print(digits.count(1)) digits.index(1,) # 列表切片:可以处理指定的原列表的部分元素称为切片 players = ['孙杨', '刘翔', '姚明', '邓亚萍', '刘国梁', '马龙', '许昕'] a = players[:] # # [ : ]:表示复制整个列表,给对象a print(a) for i in players[:]: # [ : ]:表示整个列表 print(i) for i in players[:3]: # [:3] 其中前半部分可以省略,表示从0开始, print(i) for i in players[3:]: # [3:]:后半部分也可以神略表示到最后一位 print(i) for i in players[-3:]: # [-3: -1]: 表示列表中的后三位元素 print(i) # 列表调换的简易写法 a = [1, 2, 3, 4, 5, 6, 5, 4, 5, 8, 1] b = [7, 8, 9, 4, 2, 3, 4, 6] print(a, b) print(id(a),id(b)) a, b = b, a # 调换a, b两个列表的值 print(a, b) print(id(a),id(b))



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3