向列表中添加元素有四种方法:append()、extend()、insert()、+=。
x = []
x.append([1, 2])
print(x) # [[1, 2]]
x.insert(1, [1, 2])
print(x) # [[1, 2], [1, 2]]
x.extend([1, 2])
print(x) # [[1, 2], 1, 2]
x += [1, 2]
print(x) # [[1, 2], [1, 2], 1, 2, 1, 2]
使用extend()方法向列表末尾添加多个元素。
x = []
x.extend("星期五") # 字符串
print(x) # ['星', '期', '五']
x.extend([5, 6]) # 列表
print(x) # ['星', '期', '五', 5, 6]
x.extend((7, 8)) # 元组
print(x) # ['星', '期', '五', 5, 6, 7, 8]
x.extend({1: "星期一", 2: "星期二"}) # 字典
print(x) # ['星', '期', '五', 5, 6, 7, 8, 1, 2]
x.extend({9, 10}) # 集合
print(x) # ['星', '期', '五', 5, 6, 7, 8, 1, 2, 9, 10]
extend()方法不返回值,但更新列表。
x = []
y = x.extend([1, 2])
print(y) # None
print(x.extend([3, 4])) # None
print(x) # [1, 2, 3, 4]
因为extend()方法没有产生值,所以不能将extend()方法赋给一个变量,不能直接使用print()函数将extend()方法输出。
x = []
y = x.extend([1, 2])
print(y) # None
print(x.extend([3, 4])) # None
print(x) # [1, 2, 3, 4]
使用append()方法和insert()方法添加元素时,既可以添加单个元素,也可以添加序列,使用extend()方法添加元素时,只能添加序列,不能添加单个元素。
x = []
x.append([1, 2])
x.append(1)
print(x) # [[1, 2], 1]
x.insert(len(x), [1, 2])
x.insert(len(x), 1)
print(x) # [[1, 2], 1, [1, 2], 1]
x.extend([1, 2])
print(x) # [[1, 2], 1, [1, 2], 1, 1, 2]
append()方法和insert()方法是将整个序列添加进去,extend()方法是将序列拆分后一个元素一个元素的添加进去。
x = []
x.append([1, 2])
print(x) # [[1, 2]]
x.insert(1, [1, 2])
print(x) # [[1, 2], [1, 2]]
x.extend([1, 2])
print(x) # [[1, 2], 1, 2]
浅拷贝:拷贝这个对象的内存地址,原对象发生变化新对象也会跟着发生变化。
x = []
y = x
x.append("星期五")
print(y) # ['星期五']
深拷贝:拷贝这个对象的全部内容,原对象发生变化新对象不会跟着发生变化。
x = []
y = x.copy()
x.append("星期五")
print(x) # ['星期五']
print(y) # []
使用append()方法和insert()方法添加序列时,使用的是浅拷贝,使用extend()方法添加序列时,使用的是深拷贝。
x = []
y = [1, 2]
x.append(y)
print(x) # [[1, 2]]
y.append(3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.insert(1, y)
print(x) # [[1, 2]]
y.insert(2, 3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.extend([1, 2])
print(x) # [1, 2]
y.extend([3])
print(x) # [1, 2]
使用append()方法和insert()方法添加序列时,添加的是内存地址,而不是实际的值,如果原序列发生变化,添加进去的序列也会跟着发生变化,使用extend()方法添加序列时,添加的是全部内容,如果原序列发生变化添加进去的序列不会跟着发生变化(涉及到了浅拷贝和深拷贝)。
x = []
y = [1, 2]
x.append(y)
print(x) # [[1, 2]]
y.append(3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.insert(1, y)
print(x) # [[1, 2]]
y.insert(2, 3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.extend([1, 2])
print(x) # [1, 2]
y.extend([3])
print(x) # [1, 2]
+=与extend()方法实现的效果是一样的。
x = []
x += "星期五" # 字符串
print(x) # ['星', '期', '五']
x += [5, 6] # 列表
print(x) # ['星', '期', '五', 5, 6]
x += (7, 8) # 元组
print(x) # ['星', '期', '五', 5, 6, 7, 8]
x += {1: "星期一", 2: "星期二"} # 字典
print(x) # ['星', '期', '五', 5, 6, 7, 8, 1, 2]
x += {9, 10} # 集合
print(x) # ['星', '期', '五', 5, 6, 7, 8, 1, 2, 9, 10]