In mathematics, the power set of a set S is the set of all subsets of S, including the empty set and S itself. Your task is to implement the function `power_set(nums)` that takes a list of distinct elements (any Python data type) and returns a list of all possible subsets. Each subset must be a list. The order of subsets in the final list does not matter, and the order of elements within each subset should preserve the order they appear in the original input list. The input list will have no duplicate elements, but note that elements could be of different types (e.g., integers, strings). The function should handle an empty list by returning a list containing only the empty list.
Constraints
Input list length n satisfies 0 ≤ n ≤ 10. The elements are distinct and hashable, but they may be of different types (e.g., int, str). The output must be a list of lists, where each inner list is a subset. The total number of subsets will be 2^n. Your solution should be efficient enough for the given constraints.