import bpy
lista = []
import random, math
for _ in range(1000):
alpha = random.random()*2*3.14
r = random.random()*5 + 5
angle_i = (random.random()-0.5)*0.05
x = r * math.sin(alpha)
y = r * math.cos(alpha)
z = r * math.sin(angle_i)
lista.append((x, y, z))
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=1, radius=0.05)
sphere = bpy.context.object
for loc in lista:
ob = sphere.copy()
ob.location = loc
#ob.data = sphere.data.copy() # uncomment this, if you want full copies and no linked duplicates
bpy.context.collection.objects.link(ob)
aW1wb3J0IGJweQoKbGlzdGEgPSBbXQppbXBvcnQgcmFuZG9tLCBtYXRoCmZvciBfIGluIHJhbmdlKDEwMDApOgogICAgYWxwaGEgPSByYW5kb20ucmFuZG9tKCkqMiozLjE0CiAgICByID0gcmFuZG9tLnJhbmRvbSgpKjUgKyA1CiAgICBhbmdsZV9pID0gKHJhbmRvbS5yYW5kb20oKS0wLjUpKjAuMDUKICAgIHggPSByICogbWF0aC5zaW4oYWxwaGEpCiAgICB5ID0gciAqIG1hdGguY29zKGFscGhhKQogICAgeiA9IHIgKiBtYXRoLnNpbihhbmdsZV9pKQogICAgbGlzdGEuYXBwZW5kKCh4LCB5LCB6KSkKCgpicHkub3BzLm9iamVjdC5zZWxlY3RfYWxsKGFjdGlvbj0nREVTRUxFQ1QnKQpicHkub3BzLm1lc2gucHJpbWl0aXZlX2ljb19zcGhlcmVfYWRkKHN1YmRpdmlzaW9ucz0xLCByYWRpdXM9MC4wNSkKc3BoZXJlID0gYnB5LmNvbnRleHQub2JqZWN0Cgpmb3IgbG9jIGluIGxpc3RhOgogICAgb2IgPSBzcGhlcmUuY29weSgpCiAgICBvYi5sb2NhdGlvbiA9IGxvYwogICAgI29iLmRhdGEgPSBzcGhlcmUuZGF0YS5jb3B5KCkgIyB1bmNvbW1lbnQgdGhpcywgaWYgeW91IHdhbnQgZnVsbCBjb3BpZXMgYW5kIG5vIGxpbmtlZCBkdXBsaWNhdGVzCiAgICBicHkuY29udGV4dC5jb2xsZWN0aW9uLm9iamVjdHMubGluayhvYikK