Smallest expression within brackets
Your code works, but is difficult to understand. Especially it is hard to understand what exactly is stored in b, this list contains both integers and strings. The name b also does not give a clue what it used for.

I would suggest a more straight forward method with more descriptive names for variables:

s = "((a+b*d)*(x/2))*(1+(y+(x-2)/10))"

opening_bracket_pos = []
stack = []

for i in range(0, len(s)):
    if s[i] == '(':
        opening_bracket_pos.append(i)
    elif s[i] == ')':
        start_pos = opening_bracket_pos.pop()
        stack.append(s[start_pos: i+1])

print(s)
print(stack)