python列表里的切片和赋值

  • 直接赋值是让同一个列表有了不同名字而已,所指向的内存空间是一样的,其中任意一个发生改变,另外一个也会跟着改变;

  • 而切片是开辟了一个新的空间存放了与原列表内容一样的值,它的内容受原来列表的变化而影响。

L1 = ['a','b','c']
L2 = L1
L3 = L1[:]

print('L1=',L1)
print('L2=',L2)
print('L3=',L3)
L1= ['a', 'b', 'c']
L2= ['a', 'b', 'c']
L3= ['a', 'b', 'c']
L1.append('d')
print('L1=',L1)
print('L2=',L2)
print('L3=',L3)

//输出如下:

L1= ['a', 'b', 'c', 'd']
L2= ['a', 'b', 'c', 'd']
L3= ['a', 'b', 'c']


L3.append('e')
print('L1=',L1)
print('L2=',L2)
print('L3=',L3)

//输出如下:

L1= ['a', 'b', 'c', 'd']
L2= ['a', 'b', 'c', 'd']
L3= ['a', 'b', 'c', 'e']


L2.remove('a')
print('L1=',L1)
print('L2=',L2)
print('L3=',L3)

//输出如下:

L1= ['b', 'c', 'd']
L2= ['b', 'c', 'd']
L3= ['a', 'b', 'c', 'e']

牛客网上的一道题:

a=[1,2,3]
b=a
b[:] = [x+1 for x in a]
print (a, b)
b = [x-1 for x in a]
print (a, b)

//输出如下:

[2, 3, 4] [2, 3, 4]
[2, 3, 4] [1, 2, 3]

需要注意的是啊,就是啊,有只小黄故意捣乱,说为啥如下的代码,我对b=a值直接赋值之后,应该按照你上面说的 ''b和a指向同一个内存,任意一方改变时,另一方也会改变'' ,那为啥,我对b重新赋值之后,输出的a 没有变化。原因是:因为你对整个b变量全部重新赋值,其实此时是:把b指向了一个存放着[1,2,3,4]列表的内存的地方,a和b指向的内存已经不是一个内存了。

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

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

//输出如下:

[1, 2, 3] [1, 2, 3]
[1, 2, 3] [1, 2, 3, 4]

猜你喜欢

转载自blog.csdn.net/Strive_0902/article/details/81607735
今日推荐