Lists, sets, and maps 
Lists 
A list of elements of type t has type sp.list[t]. For example, the list [1, 2, 3] has type sp.list[sp.int].
SmartPy lists have different methods than Python lists. For example, to add an element to a SmartPy list, use its push() method, not the standard Python append() method.
- sp.sum(xs: sp.list[sp.int]) → sp.int
 - sp.sum(xs: sp.list[sp.nat]) → sp.nat
 Returns the sum of all the elements in a list, for example
sp.sum([1, 2, 3]) == 6. Works on lists of bothsp.natandsp.int.
- l.push(x: t)
 Adds an element to the start of a list. For example:
smartpys = [1, 2, 3] s.push(4) # evaluates to `[4, 1, 2, 3]`
- sp.cons(x: t, x: sp.list[t]) → sp.list[t]
 Returns a new list with an element added to the front. For example
sp.cons(1, [2, 3])evaluates to[1, 2, 3].
- sp.range(to: sp.nat) → sp.list[sp.nat]
 - sp.range(to: sp.int) → sp.list[sp.int]
 - sp.range(from_: sp.nat, to: sp.nat) → sp.list[sp.nat]
 - sp.range(from_: sp.int, to: sp.int) → sp.list[sp.int]
 - sp.range(from_: sp.nat, to: sp.nat, step: sp.nat) → sp.list[sp.nat]
 - sp.range(from_: sp.int, to: sp.int, step: sp.int) → sp.list[sp.int]
 Get a series of numbers with the specified parameters.
sp.range(3)evaluates to[0, 1, 2].sp.range(3, 7)evaluates to[3, 4, 5, 6].sp.range(3, 7, 2)evaluates to[3, 5].
- reversed(x: sp.list[t]) → sp.list[t]
 Reverse and return a new list from the provided list. For example,
reversed([1, 2, 3])evaluates to[3, 2, 1].
Sets 
A set containing elements of type t is represented as {...} and has the type sp.set[t]. For instance, the set {1, 2, 3} is of type sp.set[sp.int]. To create an empty set, use set().
SmartPy sets have different methods than Python sets. For example, to check if an element is in a SmartPy set, use its contains() method, not the standard Python in operator.
Maps 
A map that takes elements of type k to elements of type v has type sp.map[k, v]. SmartPy maps are similar to Python's dictionaries.
You can access entries in a map with the m[...] notation, as in this example:
m = {'a': 65, 'b': 66}
assert m['a'] == 65
m['c'] = 67
assert m['c'] == 67- del m[key: t]
 An entry can be deleted from a map using the statement
del m[key]. For example:smartpym = {'a': 65, 'b': 66} del m['a'] assert not m.contains('a')
- m.get(key: k, default=...: v) → v
 - m.get(key: t, error=...: t) → v
 Looks up
keyin the mapm. Ifkeydoes not have an entry in the map,defaultis returned orerroris raised, according to which keyword argument is given. You must provide eitherdefaultorerrorbut not both.
- m.get_opt('key: k') → sp.option[t]
 Returns
sp.Some(value)if the value is found in the mapm,Noneotherwise.
- m.items() → sp.list[sp.record(key=k, value=v)]
 {'a': 97, 'b': 98}.items()evaluates to[sp.record(key='a', value=97), sp.record(key='b', value=98)].
- sp.update_map(key: k, value: sp.option[v], m: map[k, v]) → map[k, v]
 Returns a copy of
mwith a modified entry atkey: ifvalue == None, it is removed; ifvalue == sp.Some(v), it isv.Example:
smartpyassert sp.update_map('a', sp.Some(3), {})['a'] == 3 assert sp.update_map('a', None, {'a': 2}).get('a', default=-1) == -1
- sp.get_and_update(key: k, value: sp.option[v], m: map[k, v]) → sp.pair[sp.option[v], map[k, v]]
 Like
sp.update_map, but also returns the old value of the map (orNoneifkhad no entry).
Big maps 
The type sp.big_map[k, v] is similar to sp.map, but it is lazily deserialized. Big maps are useful for storing large amounts of data in a map, such as a ledger of token owners. Using sp.big_map can reduce gas costs significantly compared to standard maps because data is lazily deserialized. Note however that individual operations on sp.big_map have higher gas costs than those over standard maps. A sp.big_map also has a lower storage cost than a standard map of the same size when large keys are used, because only the hash of each key is stored in a sp.big_map.
In SmartPy, big maps behave much like maps:
- You can get, add, or update an element in a big map with the 
m[...]notation just lke maps. - You can use 
delto remove an element from big maps. - Big maps have some of the same methods as maps, including 
get()andget_opt(). - You can use 
sp.update_mapandsp.get_and_updateto update big maps. 
However, they have these differences:
- To create a big map, you must use the 
sp.big_mapfunction. - Big maps do not have these methods that maps have: 
items()keys()values()
 - You cannot iterate over a big map or put one inside another big map.