#python3.1.1
import random
list_p=list()
dict_p=dict()
for v in range(10):
dict_p['a']=random.randrange(0,100)
list_p.append(dict_p)
print(list_p)
list_x=list()
for v in range(10):
dict_x=dict()
dict_x['a']=random.randrange(0,100)
list_x.append(dict_x)
print(list_x)
输出:
[{'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}, {'a': 35}]
[{'a': 51}, {'a': 98}, {'a': 60}, {'a': 13}, {'a': 25}, {'a': 7}, {'a': 58}, {'a': 54}, {'a': 53}, {'a': 13}]
关于对象,pytho只是应用传递,对一个对象幅值,其实是创建新的对象,而不是修改原来的对象
第一行输出完全一样,因为dict_p只是被一次赋值,而list_p.append(dict_p)是引用传递,并未复制一个对象的copy到list_p内
第二行输出值不一样,因为每次都是通过 dict_x=dict()创建新的对象
x=list(range(6))
y=x
random.shuffle(y)
print(x)
[4, 0, 1, 5, 3, 2]
print(y)
[4, 0, 1, 5, 3, 2]
def fun1(x):
for nx in range(len(x)):
x[nx]+=10
print('x in fun1',x)
def fun2(x):
x=len(x)*[0]
for nx in range(len(x)):
x[nx]+=10
print('x in fun2',x)
x=list(range(10))
print(x)
fun1(x)
print(x)
fun2(x)
print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x in fun1 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
x in fun2 [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
fun2通过x=len(x)*[0]创建一个新的变量,而不是修改最初的x;同理fun1一直是修改x而不是创建新的变量。
fun1修改传递给它的变量,而fun2创建一个新的变量