关于python list的‘=‘号指针问题

关于python list的’='号指针问题

a = [‘1’,‘2’,‘3’]
b = a
print(a)
print(b)

[‘1’, ‘2’, ‘3’]
[‘1’, ‘2’, ‘3’]
那么当a发生改变时,b的值会发生改变吗?
答案:会!
a[0] = ‘0’
print(a)
print(b)

[‘0’, ‘2’, ‘3’]
[‘0’, ‘2’, ‘3’]
为什么呢?
这里涉及到一个原理,python的=号只是将指针指向某个值,并非将a值赋值给b值,或者创建b值。

如何更改这种指针从而变成创建新的值呢?
方法有两种,以下为示范:

方法1 使用list方法创建
a = [‘1’,‘2’,‘3’]
b = list(a)
a[0] = ‘0’
print(a)
print(b)

[‘0’, ‘2’, ‘3’]
[‘1’, ‘2’, ‘3’]
方法2 使用set方法创建(同时set方法有去除列表中重复值的功能)
a = [‘1’,‘2’,‘3’]
b = set(a)
a[0] = ‘0’
print(a)
print(b)
a = [‘1’,‘2’,‘3’,‘3’]
b = set(a)
a[0] = ‘0’
print(a)
print(b)

[‘0’, ‘2’, ‘3’]
{‘1’, ‘3’, ‘2’}
[‘0’, ‘2’, ‘3’, ‘3’]
{‘1’, ‘3’, ‘2’}

但是这里b的类型不是list
print(type(b))
set

可以通过list方法将其转为list类型
b = list(b)
print(b)
print(type(b))

[‘1’, ‘3’, ‘2’]

所以其实set的方法和list方法可以归为一类
方法2 使用.copy()方法创建
a = [‘1’,‘2’,‘3’]
b = a.copy()
a[0] = ‘0’
print(a)
print(b)
a = [‘1’,‘2’,‘3’,‘3’]
a[0] = ‘0’
print(a)
print(b)

[‘0’, ‘2’, ‘3’]
[‘1’, ‘2’, ‘3’]
[‘0’, ‘2’, ‘3’, ‘3’]
[‘1’, ‘2’, ‘3’]

你学会了吗?快动手解决遇到的问题吧!!

你可能感兴趣的:(关于python list的‘=‘号指针问题)