Python基础-数据类型+列表/字典/集合

2025-10-14

Python中所有数据都是对象,分为可变(Mutable)和不可变(Immutable)。可变就是创建后值可以修改,而对象本身的内存地址不变(list、dict、set)。不可变就是创建后值不可以修改(int、float、str、bool、tuple),修改的话本身的内存地址会变化。作为函数参数时,不可变对象传递的是值(即使修改也只在函数内部),可变对象传递的是引用(函数内部修改会影响外部)。字典的键必须是不可变类型,因为字典需要计算键的哈希值来快速查找,可变对象哈希值可能变化,导致无法定位。

可变多方便,为什么会有不可变这种类型呢?主要原因如下:

a = 10
print(id(a))
a += 1
print(id(a))  # 发现地址变化,a是不可变类型

s = "hello"
print(id(s)) 
s += " world"
print(id(s))  # 发现地址变化,s是不可变类型

l = [1, 2]
print(id(l))
l.append(3)
print(id(l))  # 地址不变,l是可变类型

result:
140736140286680
140736140286712
3067395053136
3067395586608
3067392807296
3067392807296
**1. 核心数据结构:列表 (list), 字典 (dict), 集合 (set)**

1.1 列表 (List)

# ############列表##############
my_list = [1, 'hello', True]  # 创建
print(my_list[1], my_list[-1], my_list[1:3])  # 索引切片  hello True ['hello', True]

# 增
my_list.append(my_list)  # 整体添加  [1, 'hello', True, [...]]
print(my_list)
my_list.insert(0,0)
print(my_list)
my_list.extend(my_list)  # 内部元素逐个添加  [0, 1, 'hello', True, [...], 0, 1, 'hello', True, [...]]
print(my_list)

# 删
my_list.remove(my_list)  # 删除第一个匹配项  [0, 1, 'hello', True, 0, 1, 'hello', True, [...]]
print(my_list)
my_list.pop(0)  # 删除并返回指定索引项  [1, 'hello', True, 0, 1, 'hello', True, [...]]
print(my_list)
del my_list[0]  # 案索引删除  ['hello', True, 0, 1, 'hello', True, [...]]
print(my_list)

# 查
print("hello" in my_list)  # True
print(my_list.count("hello"))  # 2
print(my_list.index("hello"))  # 查找第一个对应值的索引

# 排序
print(my_list.sort())
print(sorted(my_list))

注意点:

append(item):将 item 作为一个整体添加到列表末尾。extend(iterable):将 iterable 中的所有元素逐个添加到列表末尾。

del list[index]:根据索引删除元素,不返回值。remove(value):删除列表中第一个匹配的 value,不返回值。pop(index=None):根据索引删除元素,并返回被删除的元素。默认删除并返回最后一个。

1.2 字典 (Dictionary)

# ############字典##############
my_dict = {'name': 'Tom', 'age': 10, 'city': 'Nanjing'}  # 创建

# 访问
print(my_dict['city'])  # Nanjing
# print(my_dict['home'])  # 报错
print(my_dict.get('city'))  # Nanjing
print(my_dict.get('home', "暂无此信息!"))  # 暂无此信息!

# 增/改
my_dict['home'] = 'Beijing'  #
print(my_dict.get('home', "暂无此信息!"))  # Beijing

# 删
del my_dict['age']
print(my_dict.get('age', "暂无此信息!"))  # 暂无此信息!
# print(my_dict.pop('city'))  # Nanjing
print(my_dict.popitem())  # 3.7之后,末尾的键对值('home', 'Beijing')
# my_dict.clear()  # 清楚所有元素

# 视图
print(my_dict.keys())  # dict_keys(['name', 'city'])
print(my_dict.values())  # dict_values(['Tom', 'Nanjing'])
print(my_dict.items())  # dict_items([('name', 'Tom'), ('city', 'Nanjing')])

# 合并:
my_dict.update({'home': 'Beijing'})
print(my_dict.items())  # dict_items([('name', 'Tom'), ('city', 'Nanjing'), ('home', 'Beijing')])
**2.3 集合 (Set)**
# ############集合##############
my_set = {1, 2, 3}
empty_set = set()  # (不能用 {},因为那是空字典)

# 增
my_set.add("2")
print(my_set)  # {1, 2, 3, '2'}
my_set.add(2)  # 已有的再增加无反应
print(my_set)  # {1, 2, 3, '2'}

# 删
# my_set.pop()  # 似乎是删除第一个
# print(my_set)  # {2, 3, '2'}
# my_set.remove("2")
# print(my_set)  # {2, 3}
# my_set.discard(3)
# print(my_set)  # {2}
# my_set.clear()
# print(my_set)  # set()

# 集合运算:
a = empty_set.union(my_set)
print(a)  # {'2', 1, 2, 3}
a.add(4)
print(a.intersection(my_set))  # {1, 2, 3, '2'}
my_set.add(5)
print(a.difference(my_set))  # {4} 仅仅是a中非交集元素
print(a.symmetric_difference(my_set))  # {4,5} 两个集合的非交集

print(a.issubset(my_set))  # False
print(my_set.issubset(a))  # True
print(a.issuperset(my_set))  # True
print(my_set.issuperset(a))  # False
print(my_set.isdisjoint(a))  # False
print(my_set.isdisjoint(empty_set))  # True

← 返回