-
已知a = [1, 2, 3]和b = [1, 2, 4],那么id(a[1])==id(b[1])的执行结果 ()
答案:True
解析:id() 函数用于获取对象的内存地址。但值得注意的是,python 为了提高内存利用效率会对一些简单的对象(如数值较小的int型对象,字符串等)采用重用对象内存的办法。
注意:id(a[2])==id(b[2]) False
a = [1, 2, 3]
b = [1, 2, 4]
id(a[1])==id(b[1])
Out[4]: True
id(a)
Out[5]: 1327724366344
id(b)
Out[6]: 1327724665928
id(a[0])==id(b[0])
Out[7]: True
id(a[2])==id(b[2])
Out[8]: False
- 下面的python3函数,如果输入的参数n非常大,函数的返回值会趋近于以下哪一个值(选项中的值用Python表达式来表示)
import random
def foo(n):
random.seed()
c1 = 0
c2 = 0
for i in range(n):
x = random.random()
y = random.random()
r1 = x * x + y * y
r2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)
if r1 <= 1 and r2 <= 1:
c1 += 1
else:
c2 += 1
return c1 / c2
答案:(math.pi - 2) / (4 - math.pi)
解析:
- 下面代码运行后,a、b、c、d四个变量的值分别是?
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
答案:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
解析:
b = a # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
c = copy.copy(a) # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变
d = copy.deepcopy(a) #深拷贝,完全拷贝,完全独立于原对象,a变也不变
a.append(5) # 改变父对象
a[4].append(‘c’) #改变父对象中的 [‘a’, ‘b’]子对象
5.以下程序结果为
import numpy as np
a = np.repeat(np.arange(5).reshape([1,-1]),10,axis = 0)+10.0 b = np.random.randint(5, size= a.shape)
c = np.argmin(a*b, axis=1)
b = np.zeros(a.shape)
b[np.arange(b.shape[0]), c] = 1
print b
答案:一个 shape = (10,5) 的 one-hot 矩阵
解析:
a = np.repeat(np.arange(5).reshape([1,-1]),10,axis = 0)+10.0
"""
np.repeat(a,b)将a重复b次
np.arange(5).reshape([1,-1])创建等差数组,1行,列未知
即[1,2,3,4,5]按行重复10次,广播每一个值加10
"""
b = np.random.randint(5, size= a.shape)
# 生成[0,5)随机矩阵,大小和矩阵a相同
c = np.argmin(a*b, axis=1)
# 矩阵a和b乘积,返回每行最小值位置
b = np.zeros(a.shape)
# 与矩阵a相同大小的全零矩阵
b[np.arange(b.shape[0]), c] = 1
# b中所有c返回位置置为1