Python学习笔记_List&Tuple

Someting about Lists mutation

###################################
# Mutation vs. assignment


################
# Look alike, but different

a = [4, 5, 6]
b = [4, 5, 6]
print "Original a and b:", a, b
print "Are they same thing?", a is b

a[1] = 20
print "New a and b:", a, b
print

################
# Aliased

c = [4, 5, 6]
d = c
print "Original c and d:", c, d
print "Are they same thing?", c is d

c[1] = 20
print "New c and d:", c, d
print

################
# Copied

e = [4, 5, 6]
f = list(e)
print "Original e and f:", e, f
print "Are they same thing?", e is f

e[1] = 20
print "New e and f:", e, f
print


###################################
# Interaction with globals


a = [4, 5, 6]

def mutate_part(x):  #注:这里的a默认为global
    a[1] = x

def assign_whole(x): 
    a = x

def assign_whole_global(x):
    global a
    a = x

mutate_part(100)
print a

assign_whole(200)
print a

assign_whole_global(300)
print a
View Code

这里的赋值需要注意:

b = a ,则a, b指向同一块内存,对a[1]或者b[1]赋值, 都可以改变这个list;

b = list(a), 则a, b指向不同的内存。

又如:

x = range(5)

y = x

y = [0, 1, 10, 3, 4]

这时,y又会被分配一块内存。x, y不指向同一块内容了。

global  vs  local

mutate_part(x)这个函数对a[1]进行了更改,这里a被默认为global;

assign_whole(x)中a则是local。

assign_whole_global(x)中想对全局变量进行更改,所以加上global关键字

a = range(5)
def mutate1(b):
    b[3] = 100
    print b #[0, 1, 2, 100, 4]
mutate1(a)
print a[3]# 100
  
    
a = range(5)
def mutate1(a):
    b[3] = 100 #NameError: name 'b' is not defined
    print b 
mutate1(a)
print a[3]


a = range(5)
def mutate1(b):
    a[3] = 100
    print b #[0, 1, 2, 100, 4], 这里b是a的副本
mutate1(a)
print a[3]# 100


a = range(5)
def mutate1(a):
    a[3] = 100
    print a #[0, 1, 2, 100, 4]
mutate1(a)
print a[3]# 100

 其实,只要mutate()传递的是a这个global,则函数中对a[]做的赋值操作,均是对全局global的操作。

lists  & tuples(多元组)

difference: lists are mutable; tuples are immutable, strings are the same as tuples, immutable.

list的‘‘+’’, 可不是向量的对应项相加的意思哦!

原文地址:https://www.cnblogs.com/beatrice7/p/4029450.html